{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "path = os.getcwd()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1 划分数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.read_csv(path + '/creditcard.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 划分数据集\n",
    "X = data.drop(['Class'], axis = 1).values\n",
    "Y = data['Class'].values\n",
    "del data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2 训练模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split, learning_curve\n",
    "from sklearn import metrics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 划分训练集与测试集\n",
    "randomState = 10\n",
    "np.random.seed(randomState)\n",
    "X_dtrain, X_deval, y_dtrain, y_deval = train_test_split(X,\n",
    "                                                        Y,\n",
    "                                                        test_size = 0.3,\n",
    "                                                        random_state = randomState)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.1 Logistic算法训练模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\grid_search.py:42: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. This module will be removed in 0.20.\n",
      "  DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "# Logistic分类\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "# 网格搜索\n",
    "from sklearn.grid_search import GridSearchCV"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "grid scores :\n",
      "\n",
      "mean: 0.00176, std: 0.00001, params: {'C': 0.05}\n",
      "mean: 0.39268, std: 0.47891, params: {'C': 0.1}\n",
      "mean: 0.39902, std: 0.48654, params: {'C': 0.15}\n",
      "mean: 0.73543, std: 0.37757, params: {'C': 0.2}\n",
      "mean: 0.54495, std: 0.45184, params: {'C': 0.25}\n",
      "mean: 0.59541, std: 0.48472, params: {'C': 0.3}\n",
      "mean: 0.39504, std: 0.48167, params: {'C': 0.35}\n",
      "mean: 0.58157, std: 0.47386, params: {'C': 0.39999999999999997}\n",
      "mean: 0.39699, std: 0.48407, params: {'C': 0.44999999999999996}\n",
      "mean: 0.59089, std: 0.48104, params: {'C': 0.49999999999999994}\n",
      "mean: 0.20010, std: 0.39669, params: {'C': 0.5499999999999999}\n",
      "mean: 0.77763, std: 0.38837, params: {'C': 0.6}\n",
      "mean: 0.39818, std: 0.48550, params: {'C': 0.65}\n",
      "mean: 0.79307, std: 0.39568, params: {'C': 0.7}\n",
      "mean: 0.59593, std: 0.48513, params: {'C': 0.75}\n",
      "mean: 0.38024, std: 0.46448, params: {'C': 0.7999999999999999}\n",
      "mean: 0.59333, std: 0.48306, params: {'C': 0.85}\n",
      "mean: 0.59280, std: 0.48264, params: {'C': 0.9}\n",
      "mean: 0.20057, std: 0.39759, params: {'C': 0.95}\n",
      "mean: 0.77807, std: 0.38828, params: {'C': 1.0}\n",
      "\n",
      "best params :  {'C': 0.7}\n",
      "\n",
      "best score :  0.7930669529102546\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\sag.py:326: ConvergenceWarning: The max_iter was reached which means the coef_ did not converge\n",
      "  \"the coef_ did not converge\", ConvergenceWarning)\n"
     ]
    }
   ],
   "source": [
    "# 需搜索的参数\n",
    "log_param_grid = {'C': list(np.linspace(0.05, 1, 20))    # 正则项系数的倒数，它必须是一个正的浮点数\n",
    "                                                         # 像支持向量机一样，值越小则正则化更强\n",
    "                  }\n",
    "gsearch = GridSearchCV(\n",
    "    estimator = LogisticRegression(tol = 1e-8,\n",
    "                                   class_weight = 'balanced',\n",
    "                                   solver = 'sag',\n",
    "                                   max_iter = 500,\n",
    "                                   multi_class = 'ovr',\n",
    "                                   n_jobs = -1\n",
    "                                   ),\n",
    "    param_grid = log_param_grid,\n",
    "    cv = 5,\n",
    "    n_jobs = -1)\n",
    "\n",
    "gsearch.fit(X_dtrain, y_dtrain.ravel())\n",
    "\n",
    "# 打印每个搜索的分数\n",
    "print('grid scores :\\n')\n",
    "for i in gsearch.grid_scores_:\n",
    "    print(i)\n",
    "# 打印最佳参数\n",
    "print('\\nbest params : ', gsearch.best_params_)\n",
    "# 打印最高分数\n",
    "print('\\nbest score : ', gsearch.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Logistic Accuracy  :  0.9920180705265499\n",
      "Logistic Recall    :  0.014184397163120567\n",
      "Logistic Precision :  0.003669724770642202\n",
      "Logistic F1 score  :  0.0058309037900874635\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\sag.py:326: ConvergenceWarning: The max_iter was reached which means the coef_ did not converge\n",
      "  \"the coef_ did not converge\", ConvergenceWarning)\n"
     ]
    }
   ],
   "source": [
    "clf_log = LogisticRegression(tol = 1e-8,\n",
    "                             C = 0.35,\n",
    "                             class_weight = 'balanced',\n",
    "                             solver = 'sag',\n",
    "                             max_iter = 500,\n",
    "                             multi_class = 'ovr',\n",
    "                             n_jobs = -1)\n",
    "clf_log.fit(X_dtrain, y_dtrain)\n",
    "y_pred = clf_log.predict(X_deval)\n",
    "print('Logistic Accuracy  : ', metrics.accuracy_score(y_deval, y_pred))\n",
    "print('Logistic Recall    : ', metrics.recall_score(y_deval, y_pred))\n",
    "print('Logistic Precision : ', metrics.precision_score(y_deval, y_pred))\n",
    "print('Logistic F1 score  : ', metrics.f1_score(y_deval, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.2 SVM算法训练模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 支持向量机分类\n",
    "from sklearn.svm import SVC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "grid scores :\n",
      "mean: 0.00448, std: 0.00030, params: {'C': 1}\n",
      "mean: 0.99827, std: 0.00004, params: {'C': 2}\n",
      "mean: 0.99827, std: 0.00004, params: {'C': 3}\n",
      "mean: 0.99827, std: 0.00004, params: {'C': 4}\n",
      "mean: 0.99827, std: 0.00004, params: {'C': 5}\n",
      "mean: 0.99827, std: 0.00004, params: {'C': 6}\n",
      "mean: 0.99827, std: 0.00004, params: {'C': 7}\n",
      "mean: 0.99827, std: 0.00004, params: {'C': 8}\n",
      "mean: 0.99827, std: 0.00004, params: {'C': 9}\n",
      "\n",
      "best params :  {'C': 2}\n",
      "\n",
      "best score :  0.9982745129511847\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:218: ConvergenceWarning: Solver terminated early (max_iter=500).  Consider pre-processing your data with StandardScaler or MinMaxScaler.\n",
      "  % self.max_iter, ConvergenceWarning)\n"
     ]
    }
   ],
   "source": [
    "# 网格搜索\n",
    "from sklearn.grid_search import GridSearchCV\n",
    "# 测试C参数\n",
    "SVM_param_grid = {'C': list(range(1, 10))}\n",
    "gsearch = GridSearchCV(\n",
    "    estimator = SVC(tol = 1e-8,\n",
    "                    class_weight = 'balanced',\n",
    "                    max_iter = 500),\n",
    "    param_grid = SVM_param_grid,\n",
    "    cv = 5,\n",
    "    n_jobs = -1)\n",
    "gsearch.fit(X_dtrain, y_dtrain.ravel())\n",
    "\n",
    "# 打印每个搜索的分数\n",
    "print('grid scores :')\n",
    "for i in gsearch.grid_scores_:\n",
    "    print(i)\n",
    "# 打印最佳参数\n",
    "print('\\nbest params : ', gsearch.best_params_)\n",
    "# 打印最高分数\n",
    "print('\\nbest score : ', gsearch.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "grid scores :\n",
      "mean: 0.00448, std: 0.00030, params: {'kernel': 'rbf'}\n",
      "mean: 0.44442, std: 0.10159, params: {'kernel': 'linear'}\n",
      "mean: 0.55306, std: 0.08615, params: {'kernel': 'poly'}\n",
      "mean: 0.00176, std: 0.00001, params: {'kernel': 'sigmoid'}\n",
      "\n",
      "best params :  {'kernel': 'poly'}\n",
      "\n",
      "best score :  0.5530587267510684\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:218: ConvergenceWarning: Solver terminated early (max_iter=500).  Consider pre-processing your data with StandardScaler or MinMaxScaler.\n",
      "  % self.max_iter, ConvergenceWarning)\n"
     ]
    }
   ],
   "source": [
    "# 测试kernel参数\n",
    "SVM_param_grid = {'kernel': ['rbf', 'linear', 'poly', 'sigmoid']}\n",
    "gsearch = GridSearchCV(\n",
    "    estimator = SVC(C = 1.0,\n",
    "                    tol = 1e-8,\n",
    "                    class_weight = 'balanced',\n",
    "                    max_iter = 500),\n",
    "    param_grid = SVM_param_grid,\n",
    "    cv = 5,\n",
    "    n_jobs = -1)\n",
    "gsearch.fit(X_dtrain, y_dtrain.ravel())\n",
    "\n",
    "# 打印每个搜索的分数\n",
    "print('grid scores :')\n",
    "for i in gsearch.grid_scores_:\n",
    "    print(i)\n",
    "# 打印最佳参数\n",
    "print('\\nbest params : ', gsearch.best_params_)\n",
    "# 打印最高分数\n",
    "print('\\nbest score : ', gsearch.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "grid scores :\n",
      "mean: 0.55306, std: 0.08615, params: {'gamma': 0.03333333333333333}\n",
      "mean: 0.55306, std: 0.08615, params: {'gamma': 0.06666666666666667}\n",
      "mean: 0.48448, std: 0.13249, params: {'gamma': 0.1}\n",
      "mean: 0.55306, std: 0.08615, params: {'gamma': 0.13333333333333333}\n",
      "mean: 0.64261, std: 0.17626, params: {'gamma': 0.16666666666666666}\n",
      "mean: 0.48448, std: 0.13249, params: {'gamma': 0.19999999999999998}\n",
      "mean: 0.62615, std: 0.14584, params: {'gamma': 0.23333333333333334}\n",
      "mean: 0.55306, std: 0.08615, params: {'gamma': 0.26666666666666666}\n",
      "mean: 0.45417, std: 0.12975, params: {'gamma': 0.3}\n",
      "mean: 0.64261, std: 0.17626, params: {'gamma': 0.3333333333333333}\n",
      "mean: 0.49740, std: 0.25657, params: {'gamma': 0.36666666666666664}\n",
      "mean: 0.48448, std: 0.13249, params: {'gamma': 0.39999999999999997}\n",
      "mean: 0.57037, std: 0.07940, params: {'gamma': 0.43333333333333335}\n",
      "mean: 0.62615, std: 0.14584, params: {'gamma': 0.4666666666666667}\n",
      "mean: 0.52197, std: 0.11753, params: {'gamma': 0.5}\n",
      "mean: 0.55306, std: 0.08615, params: {'gamma': 0.5333333333333333}\n",
      "mean: 0.49355, std: 0.08856, params: {'gamma': 0.5666666666666667}\n",
      "mean: 0.45417, std: 0.12975, params: {'gamma': 0.6}\n",
      "mean: 0.44223, std: 0.08708, params: {'gamma': 0.6333333333333333}\n",
      "mean: 0.64261, std: 0.17626, params: {'gamma': 0.6666666666666666}\n",
      "mean: 0.53351, std: 0.06223, params: {'gamma': 0.7}\n",
      "mean: 0.49740, std: 0.25657, params: {'gamma': 0.7333333333333333}\n",
      "mean: 0.50104, std: 0.09784, params: {'gamma': 0.7666666666666666}\n",
      "mean: 0.48448, std: 0.13249, params: {'gamma': 0.7999999999999999}\n",
      "mean: 0.47369, std: 0.09669, params: {'gamma': 0.8333333333333334}\n",
      "mean: 0.57037, std: 0.07940, params: {'gamma': 0.8666666666666667}\n",
      "mean: 0.55105, std: 0.16915, params: {'gamma': 0.9}\n",
      "mean: 0.62615, std: 0.14584, params: {'gamma': 0.9333333333333333}\n",
      "mean: 0.56841, std: 0.07755, params: {'gamma': 0.9666666666666667}\n",
      "mean: 0.52197, std: 0.11753, params: {'gamma': 1.0}\n",
      "\n",
      "best params :  {'gamma': 0.16666666666666666}\n",
      "\n",
      "best score :  0.642608495014145\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:218: ConvergenceWarning: Solver terminated early (max_iter=500).  Consider pre-processing your data with StandardScaler or MinMaxScaler.\n",
      "  % self.max_iter, ConvergenceWarning)\n"
     ]
    }
   ],
   "source": [
    "# 测试gamma参数\n",
    "SVM_param_grid = {'gamma': list(np.linspace((1/30), 1, 30))}\n",
    "gsearch = GridSearchCV(\n",
    "    estimator = SVC(C = 1.0,\n",
    "                    kernel = 'poly',\n",
    "                    tol = 1e-8,\n",
    "                    class_weight = 'balanced',\n",
    "                    max_iter = 500),\n",
    "    param_grid = SVM_param_grid,\n",
    "    cv = 5,\n",
    "    n_jobs = -1)\n",
    "gsearch.fit(X_dtrain, y_dtrain.ravel())\n",
    "\n",
    "# 打印每个搜索的分数\n",
    "print('grid scores :')\n",
    "for i in gsearch.grid_scores_:\n",
    "    print(i)\n",
    "# 打印最佳参数\n",
    "print('\\nbest params : ', gsearch.best_params_)\n",
    "# 打印最高分数\n",
    "print('\\nbest score : ', gsearch.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:218: ConvergenceWarning: Solver terminated early (max_iter=500).  Consider pre-processing your data with StandardScaler or MinMaxScaler.\n",
      "  % self.max_iter, ConvergenceWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SVM Accuracy  :  0.4228432990414662\n",
      "SVM Recall    :  0.7446808510638298\n",
      "SVM Precision :  0.0021262377741327987\n",
      "SVM F1 score  :  0.004240368306275745\n"
     ]
    }
   ],
   "source": [
    "clf_SVM = SVC(C = 2.0,\n",
    "              kernel = 'poly',\n",
    "              gamma = 1/6,\n",
    "              tol = 1e-8,\n",
    "              class_weight = 'balanced',\n",
    "              max_iter = 500)\n",
    "clf_SVM.fit(X_dtrain, y_dtrain)\n",
    "y_pred = clf_SVM.predict(X_deval)\n",
    "print('SVM Accuracy  : ', metrics.accuracy_score(y_deval, y_pred))\n",
    "print('SVM Recall    : ', metrics.recall_score(y_deval, y_pred))\n",
    "print('SVM Precision : ', metrics.precision_score(y_deval, y_pred))\n",
    "print('SVM F1 score  : ', metrics.f1_score(y_deval, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.3 RandomForest算法训练模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 随机森林分类器\n",
    "from sklearn.ensemble import RandomForestClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "grid scores :\n",
      "mean: 0.99949, std: 0.00008, params: {'n_estimators': 100}\n",
      "mean: 0.99950, std: 0.00008, params: {'n_estimators': 200}\n",
      "mean: 0.99951, std: 0.00008, params: {'n_estimators': 300}\n",
      "mean: 0.99950, std: 0.00008, params: {'n_estimators': 400}\n",
      "mean: 0.99950, std: 0.00008, params: {'n_estimators': 500}\n",
      "mean: 0.99949, std: 0.00009, params: {'n_estimators': 600}\n",
      "mean: 0.99949, std: 0.00009, params: {'n_estimators': 700}\n",
      "mean: 0.99950, std: 0.00009, params: {'n_estimators': 800}\n",
      "mean: 0.99950, std: 0.00009, params: {'n_estimators': 900}\n",
      "mean: 0.99950, std: 0.00009, params: {'n_estimators': 1000}\n",
      "\n",
      "best params :  {'n_estimators': 300}\n",
      "\n",
      "best score :  0.9995084368291166\n"
     ]
    }
   ],
   "source": [
    "# 网格搜索\n",
    "from sklearn.grid_search import GridSearchCV\n",
    "# 测试n_estimators参数\n",
    "tree_param_grid = {'n_estimators':list(range(100, 1100, 100))}  # 树变量\n",
    "gsearch = GridSearchCV(\n",
    "    estimator = RandomForestClassifier(oob_score = True,\n",
    "                                       n_jobs = -1,\n",
    "                                       random_state = 10),\n",
    "    param_grid = tree_param_grid,\n",
    "    cv = 5,\n",
    "    n_jobs = -1)\n",
    "gsearch.fit(X_dtrain, y_dtrain.ravel())\n",
    "\n",
    "# 打印每个搜索的分数\n",
    "print('grid scores :')\n",
    "for i in gsearch.grid_scores_:\n",
    "    print(i)\n",
    "# 打印最佳参数\n",
    "print('\\nbest params : ', gsearch.best_params_)\n",
    "# 打印最高分数\n",
    "print('\\nbest score : ', gsearch.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "grid scores :\n",
      "mean: 0.99909, std: 0.00018, params: {'max_depth': 3}\n",
      "mean: 0.99927, std: 0.00012, params: {'max_depth': 4}\n",
      "mean: 0.99937, std: 0.00009, params: {'max_depth': 5}\n",
      "mean: 0.99941, std: 0.00006, params: {'max_depth': 6}\n",
      "mean: 0.99942, std: 0.00008, params: {'max_depth': 7}\n",
      "mean: 0.99945, std: 0.00008, params: {'max_depth': 8}\n",
      "mean: 0.99946, std: 0.00007, params: {'max_depth': 9}\n",
      "\n",
      "best params :  {'max_depth': 9}\n",
      "\n",
      "best score :  0.9994582773218836\n"
     ]
    }
   ],
   "source": [
    "# 测试max_depth参数\n",
    "tree_param_grid = {'max_depth':list(range(3, 10))}  # 树变量\n",
    "gsearch = GridSearchCV(\n",
    "    estimator = RandomForestClassifier(n_estimators = 300,\n",
    "                                       oob_score = True,\n",
    "                                       n_jobs = -1,\n",
    "                                       random_state = 5),\n",
    "    param_grid = tree_param_grid,\n",
    "    cv = 5,\n",
    "    n_jobs = -1)\n",
    "gsearch.fit(X_dtrain, y_dtrain.ravel())\n",
    "\n",
    "# 打印每个搜索的分数\n",
    "print('grid scores :')\n",
    "for i in gsearch.grid_scores_:\n",
    "    print(i)\n",
    "# 打印最佳参数\n",
    "print('\\nbest params : ', gsearch.best_params_)\n",
    "# 打印最高分数\n",
    "print('\\nbest score : ', gsearch.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "grid scores :\n",
      "mean: 0.99924, std: 0.00007, params: {'max_features': 3}\n",
      "mean: 0.99934, std: 0.00006, params: {'max_features': 4}\n",
      "mean: 0.99937, std: 0.00009, params: {'max_features': 5}\n",
      "mean: 0.99939, std: 0.00006, params: {'max_features': 6}\n",
      "mean: 0.99941, std: 0.00005, params: {'max_features': 7}\n",
      "mean: 0.99941, std: 0.00005, params: {'max_features': 8}\n",
      "mean: 0.99943, std: 0.00005, params: {'max_features': 9}\n",
      "mean: 0.99942, std: 0.00005, params: {'max_features': 10}\n",
      "mean: 0.99945, std: 0.00007, params: {'max_features': 11}\n",
      "mean: 0.99944, std: 0.00007, params: {'max_features': 12}\n",
      "mean: 0.99943, std: 0.00007, params: {'max_features': 13}\n",
      "mean: 0.99944, std: 0.00008, params: {'max_features': 14}\n",
      "mean: 0.99942, std: 0.00007, params: {'max_features': 15}\n",
      "mean: 0.99943, std: 0.00009, params: {'max_features': 16}\n",
      "mean: 0.99943, std: 0.00008, params: {'max_features': 17}\n",
      "mean: 0.99943, std: 0.00007, params: {'max_features': 18}\n",
      "mean: 0.99945, std: 0.00006, params: {'max_features': 19}\n",
      "mean: 0.99943, std: 0.00008, params: {'max_features': 20}\n",
      "mean: 0.99945, std: 0.00008, params: {'max_features': 21}\n",
      "mean: 0.99946, std: 0.00005, params: {'max_features': 22}\n",
      "mean: 0.99947, std: 0.00007, params: {'max_features': 23}\n",
      "mean: 0.99948, std: 0.00007, params: {'max_features': 24}\n",
      "mean: 0.99946, std: 0.00008, params: {'max_features': 25}\n",
      "mean: 0.99947, std: 0.00008, params: {'max_features': 26}\n",
      "mean: 0.99949, std: 0.00008, params: {'max_features': 27}\n",
      "mean: 0.99947, std: 0.00007, params: {'max_features': 28}\n",
      "mean: 0.99947, std: 0.00007, params: {'max_features': 29}\n",
      "\n",
      "best params :  {'max_features': 27}\n",
      "\n",
      "best score :  0.9994933889769467\n"
     ]
    }
   ],
   "source": [
    "# 测试max_features参数\n",
    "tree_param_grid = {'max_features':list(range(3, 30))}  # 树变量\n",
    "gsearch = GridSearchCV(\n",
    "    estimator = RandomForestClassifier(n_estimators = 300,\n",
    "                                       max_depth = 5,\n",
    "                                       oob_score = True,\n",
    "                                       n_jobs = -1,\n",
    "                                       random_state = 5),\n",
    "    param_grid = tree_param_grid,\n",
    "    cv = 5,\n",
    "    n_jobs = -1)\n",
    "gsearch.fit(X_dtrain, y_dtrain.ravel())\n",
    "\n",
    "# 打印每个搜索的分数\n",
    "print('grid scores :')\n",
    "for i in gsearch.grid_scores_:\n",
    "    print(i)\n",
    "# 打印最佳参数\n",
    "print('\\nbest params : ', gsearch.best_params_)\n",
    "# 打印最高分数\n",
    "print('\\nbest score : ', gsearch.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RandomForest Accuracy  :  0.9994733330992591\n",
      "RandomForest Recall    :  0.7304964539007093\n",
      "RandomForest Precision :  0.9363636363636364\n",
      "RandomForest F1 score  :  0.8207171314741037\n"
     ]
    }
   ],
   "source": [
    "clf_rf = RandomForestClassifier(n_estimators = 300,\n",
    "                                max_depth = 5,\n",
    "                                oob_score = True,\n",
    "                                n_jobs = -1,\n",
    "                                random_state = 5)\n",
    "clf_rf.fit(X_dtrain, y_dtrain)\n",
    "y_pred = clf_rf.predict(X_deval)\n",
    "print('RandomForest Accuracy  : ', metrics.accuracy_score(y_deval, y_pred))\n",
    "print('RandomForest Recall    : ', metrics.recall_score(y_deval, y_pred))\n",
    "print('RandomForest Precision : ', metrics.precision_score(y_deval, y_pred))\n",
    "print('RandomForest F1 score  : ', metrics.f1_score(y_deval, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.4 xgboost算法训练模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "import operator\n",
    "import xgboost as xgb"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "平衡数据调整权重： 577.8760162601626\n"
     ]
    }
   ],
   "source": [
    "# 平衡数据处理\n",
    "weights = ((Y == 0).sum() / (1.0 * (Y == 1).sum()))\n",
    "print('平衡数据调整权重：', weights)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "grid scores :\n",
      "\n",
      "mean: 0.99468, std: 0.00101, params: {'n_estimators': 100}\n",
      "mean: 0.99858, std: 0.00018, params: {'n_estimators': 200}\n",
      "mean: 0.99922, std: 0.00010, params: {'n_estimators': 300}\n",
      "mean: 0.99937, std: 0.00007, params: {'n_estimators': 400}\n",
      "mean: 0.99943, std: 0.00008, params: {'n_estimators': 500}\n",
      "mean: 0.99946, std: 0.00006, params: {'n_estimators': 600}\n",
      "mean: 0.99947, std: 0.00008, params: {'n_estimators': 700}\n",
      "mean: 0.99951, std: 0.00005, params: {'n_estimators': 800}\n",
      "mean: 0.99952, std: 0.00004, params: {'n_estimators': 900}\n",
      "mean: 0.99952, std: 0.00005, params: {'n_estimators': 1000}\n",
      "\n",
      "best params :  {'n_estimators': 900}\n",
      "\n",
      "best score :  0.9995184687305632\n"
     ]
    }
   ],
   "source": [
    "# 网格搜索\n",
    "from sklearn.grid_search import GridSearchCV\n",
    "\n",
    "# 需搜索的参数\n",
    "tree_param_grid = {'n_estimators': list(range(100, 1100, 100))    # 树的个数\n",
    "                  }\n",
    "gsearch = GridSearchCV(\n",
    "    estimator = xgb.XGBClassifier(silent = 1,\n",
    "                                  scale_pos_weight = weights,\n",
    "                                  n_jobs = -1,\n",
    "                                  eval_metric = 'auc'\n",
    "                                 ),\n",
    "    param_grid = tree_param_grid,\n",
    "    cv = 5,\n",
    "    n_jobs = -1)\n",
    "\n",
    "gsearch.fit(X_dtrain, y_dtrain.ravel())\n",
    "\n",
    "# 打印每个搜索的分数\n",
    "print('grid scores :\\n')\n",
    "for i in gsearch.grid_scores_:\n",
    "    print(i)\n",
    "# 打印最佳参数\n",
    "print('\\nbest params : ', gsearch.best_params_)\n",
    "# 打印最高分数\n",
    "print('\\nbest score : ', gsearch.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "grid scores :\n",
      "\n",
      "mean: 0.99937, std: 0.00007, params: {'max_depth': 3}\n",
      "mean: 0.99951, std: 0.00009, params: {'max_depth': 4}\n",
      "mean: 0.99952, std: 0.00009, params: {'max_depth': 5}\n",
      "mean: 0.99954, std: 0.00008, params: {'max_depth': 6}\n",
      "mean: 0.99954, std: 0.00008, params: {'max_depth': 7}\n",
      "mean: 0.99949, std: 0.00010, params: {'max_depth': 8}\n",
      "mean: 0.99948, std: 0.00009, params: {'max_depth': 9}\n",
      "\n",
      "best params :  {'max_depth': 6}\n",
      "\n",
      "best score :  0.9995385325334564\n"
     ]
    }
   ],
   "source": [
    "# 需搜索的参数\n",
    "tree_param_grid = {'max_depth': list(range(3, 10))    # 树的深度，越大越容易过拟合\n",
    "                  }\n",
    "gsearch = GridSearchCV(\n",
    "    estimator = xgb.XGBClassifier(silent = 1,\n",
    "                                  scale_pos_weight = weights,\n",
    "                                  n_jobs = -1,\n",
    "                                  eval_metric = 'auc',\n",
    "                                  n_estimators = 400 \n",
    "                                 ),\n",
    "    param_grid = tree_param_grid,\n",
    "    cv = 5,\n",
    "    n_jobs = -1)\n",
    "\n",
    "gsearch.fit(X_dtrain, y_dtrain.ravel())\n",
    "\n",
    "# 打印每个搜索的分数\n",
    "print('grid scores :\\n')\n",
    "for i in gsearch.grid_scores_:\n",
    "    print(i)\n",
    "# 打印最佳参数\n",
    "print('\\nbest params : ', gsearch.best_params_)\n",
    "# 打印最高分数\n",
    "print('\\nbest score : ', gsearch.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "grid scores :\n",
      "\n",
      "mean: 0.99954, std: 0.00008, params: {'min_child_weight': 1}\n",
      "mean: 0.99955, std: 0.00005, params: {'min_child_weight': 2}\n",
      "mean: 0.99953, std: 0.00005, params: {'min_child_weight': 3}\n",
      "mean: 0.99953, std: 0.00007, params: {'min_child_weight': 4}\n",
      "mean: 0.99951, std: 0.00006, params: {'min_child_weight': 5}\n",
      "mean: 0.99951, std: 0.00008, params: {'min_child_weight': 6}\n",
      "mean: 0.99953, std: 0.00008, params: {'min_child_weight': 7}\n",
      "mean: 0.99953, std: 0.00006, params: {'min_child_weight': 8}\n",
      "mean: 0.99952, std: 0.00006, params: {'min_child_weight': 9}\n",
      "\n",
      "best params :  {'min_child_weight': 2}\n",
      "\n",
      "best score :  0.999548564434903\n"
     ]
    }
   ],
   "source": [
    "tree_param_grid = {'min_child_weight': list(range(1, 10))    # min_child_weight = 1\n",
    "                                                             # 即叶子节点中最少需要包含 100 个样本\n",
    "                                                             # 参数值越小，越容易 overfitting\n",
    "                   }\n",
    "gsearch = GridSearchCV(\n",
    "    estimator = xgb.XGBClassifier(silent = 1,\n",
    "                                  scale_pos_weight = weights,\n",
    "                                  n_jobs = -1,\n",
    "                                  eval_metric = 'auc',\n",
    "                                  n_estimators = 400,\n",
    "                                  max_depth = 6\n",
    "                                 ),\n",
    "    param_grid = tree_param_grid,\n",
    "    cv = 5,\n",
    "    n_jobs = -1)\n",
    "\n",
    "gsearch.fit(X_dtrain, y_dtrain.ravel())\n",
    "\n",
    "# 打印每个搜索的分数\n",
    "print('grid scores :\\n')\n",
    "for i in gsearch.grid_scores_:\n",
    "    print(i)\n",
    "# 打印最佳参数\n",
    "print('\\nbest params : ', gsearch.best_params_)\n",
    "# 打印最高分数\n",
    "print('\\nbest score : ', gsearch.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "grid scores :\n",
      "\n",
      "mean: 0.99951, std: 0.00006, params: {'subsample': 0.5}\n",
      "mean: 0.99952, std: 0.00003, params: {'subsample': 0.6}\n",
      "mean: 0.99952, std: 0.00009, params: {'subsample': 0.7}\n",
      "mean: 0.99953, std: 0.00006, params: {'subsample': 0.8}\n",
      "mean: 0.99952, std: 0.00007, params: {'subsample': 0.9}\n",
      "mean: 0.99955, std: 0.00005, params: {'subsample': 1.0}\n",
      "\n",
      "best params :  {'subsample': 1.0}\n",
      "\n",
      "best score :  0.999548564434903\n"
     ]
    }
   ],
   "source": [
    "min_child_weight = list(gsearch.best_params_.values())[0]\n",
    "tree_param_grid = {'subsample': list(np.linspace(0.5, 1, 6))  # 列采样占比，通常0.5~1\n",
    "                   }\n",
    "gsearch = GridSearchCV(\n",
    "    estimator = xgb.XGBClassifier(silent = 1,\n",
    "                                  scale_pos_weight = weights,\n",
    "                                  n_jobs = -1,\n",
    "                                  eval_metric = 'auc',\n",
    "                                  n_estimators = 400,\n",
    "                                  max_depth = 6,\n",
    "                                  min_child_weight = min_child_weight\n",
    "                                 ),\n",
    "    param_grid = tree_param_grid,\n",
    "    cv = 5,\n",
    "    n_jobs = -1)\n",
    "\n",
    "gsearch.fit(X_dtrain, y_dtrain.ravel())\n",
    "\n",
    "# 打印每个搜索的分数\n",
    "print('grid scores :\\n')\n",
    "for i in gsearch.grid_scores_:\n",
    "    print(i)\n",
    "# 打印最佳参数\n",
    "print('\\nbest params : ', gsearch.best_params_)\n",
    "# 打印最高分数\n",
    "print('\\nbest score : ', gsearch.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "grid scores :\n",
      "\n",
      "mean: 0.99953, std: 0.00007, params: {'colsample_bytree': 0.5}\n",
      "mean: 0.99955, std: 0.00008, params: {'colsample_bytree': 0.6}\n",
      "mean: 0.99955, std: 0.00006, params: {'colsample_bytree': 0.7}\n",
      "mean: 0.99955, std: 0.00006, params: {'colsample_bytree': 0.8}\n",
      "mean: 0.99952, std: 0.00006, params: {'colsample_bytree': 0.9}\n",
      "mean: 0.99955, std: 0.00005, params: {'colsample_bytree': 1.0}\n",
      "\n",
      "best params :  {'colsample_bytree': 0.6}\n",
      "\n",
      "best score :  0.9995535803856263\n"
     ]
    }
   ],
   "source": [
    "subsample = list(gsearch.best_params_.values())[0]\n",
    "tree_param_grid = {'colsample_bytree': list(np.linspace(0.5, 1, 6))  # 生成树时进行的特征采样占比，通常0.5~1\n",
    "                   }\n",
    "gsearch = GridSearchCV(\n",
    "    estimator = xgb.XGBClassifier(silent = 1,\n",
    "                                  scale_pos_weight = weights,\n",
    "                                  n_jobs = -1,\n",
    "                                  eval_metric = 'auc',\n",
    "                                  n_estimators = 400,\n",
    "                                  max_depth = 6,\n",
    "                                  min_child_weight = min_child_weight,\n",
    "                                  subsample = subsample\n",
    "                                 ),\n",
    "    param_grid = tree_param_grid,\n",
    "    cv = 5,\n",
    "    n_jobs = -1)\n",
    "\n",
    "gsearch.fit(X_dtrain, y_dtrain.ravel())\n",
    "\n",
    "# 打印每个搜索的分数\n",
    "print('grid scores :\\n')\n",
    "for i in gsearch.grid_scores_:\n",
    "    print(i)\n",
    "# 打印最佳参数\n",
    "print('\\nbest params : ', gsearch.best_params_)\n",
    "# 打印最高分数\n",
    "print('\\nbest score : ', gsearch.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "grid scores :\n",
      "\n",
      "mean: 0.99953, std: 0.00007, params: {'reg_alpha': 1}\n",
      "mean: 0.99951, std: 0.00005, params: {'reg_alpha': 2}\n",
      "mean: 0.99949, std: 0.00006, params: {'reg_alpha': 3}\n",
      "mean: 0.99949, std: 0.00005, params: {'reg_alpha': 4}\n",
      "mean: 0.99946, std: 0.00005, params: {'reg_alpha': 5}\n",
      "mean: 0.99945, std: 0.00004, params: {'reg_alpha': 6}\n",
      "mean: 0.99941, std: 0.00004, params: {'reg_alpha': 7}\n",
      "mean: 0.99940, std: 0.00005, params: {'reg_alpha': 8}\n",
      "mean: 0.99939, std: 0.00009, params: {'reg_alpha': 9}\n",
      "\n",
      "best params :  {'reg_alpha': 1}\n",
      "\n",
      "best score :  0.9995285006320098\n"
     ]
    }
   ],
   "source": [
    "colsample_bytree = list(gsearch.best_params_.values())[0]\n",
    "tree_param_grid = {'reg_alpha': list(range(1, 10))    # 权重值的L1正则化项参数\n",
    "                  }\n",
    "gsearch = GridSearchCV(\n",
    "    estimator = xgb.XGBClassifier(silent = 1,\n",
    "                                  scale_pos_weight = weights,\n",
    "                                  n_jobs = -1,\n",
    "                                  eval_metric = 'auc',\n",
    "                                  n_estimators = 400,\n",
    "                                  max_depth = 6,\n",
    "                                  min_child_weight = min_child_weight,\n",
    "                                  subsample = subsample,\n",
    "                                  colsample_bytree = colsample_bytree\n",
    "                                 ),\n",
    "    param_grid = tree_param_grid,\n",
    "    cv = 5,\n",
    "    n_jobs = -1)\n",
    "\n",
    "gsearch.fit(X_dtrain, y_dtrain.ravel())\n",
    "\n",
    "# 打印每个搜索的分数\n",
    "print('grid scores :\\n')\n",
    "for i in gsearch.grid_scores_:\n",
    "    print(i)\n",
    "# 打印最佳参数\n",
    "print('\\nbest params : ', gsearch.best_params_)\n",
    "# 打印最高分数\n",
    "print('\\nbest score : ', gsearch.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "grid scores :\n",
      "\n",
      "mean: 0.99953, std: 0.00007, params: {'reg_lambda': 1}\n",
      "mean: 0.99954, std: 0.00004, params: {'reg_lambda': 2}\n",
      "mean: 0.99954, std: 0.00003, params: {'reg_lambda': 3}\n",
      "mean: 0.99953, std: 0.00004, params: {'reg_lambda': 4}\n",
      "mean: 0.99952, std: 0.00004, params: {'reg_lambda': 5}\n",
      "mean: 0.99954, std: 0.00005, params: {'reg_lambda': 6}\n",
      "mean: 0.99954, std: 0.00005, params: {'reg_lambda': 7}\n",
      "mean: 0.99954, std: 0.00003, params: {'reg_lambda': 8}\n",
      "mean: 0.99953, std: 0.00004, params: {'reg_lambda': 9}\n",
      "\n",
      "best params :  {'reg_lambda': 6}\n",
      "\n",
      "best score :  0.9995435484841797\n"
     ]
    }
   ],
   "source": [
    "reg_alpha = list(gsearch.best_params_.values())[0]\n",
    "tree_param_grid = {'reg_lambda': list(range(1, 10))    # 权重值的L2正则化项参数\n",
    "                  }\n",
    "gsearch = GridSearchCV(\n",
    "    estimator = xgb.XGBClassifier(silent = 1,\n",
    "                                  scale_pos_weight = weights,\n",
    "                                  n_jobs = -1,\n",
    "                                  eval_metric = 'auc',\n",
    "                                  n_estimators = 400,\n",
    "                                  max_depth = 6,\n",
    "                                  min_child_weight = min_child_weight,\n",
    "                                  subsample = subsample,\n",
    "                                  colsample_bytree = colsample_bytree,\n",
    "                                  reg_alpha = reg_alpha\n",
    "                                 ),\n",
    "    param_grid = tree_param_grid,\n",
    "    cv = 5,\n",
    "    n_jobs = -1)\n",
    "\n",
    "gsearch.fit(X_dtrain, y_dtrain.ravel())\n",
    "\n",
    "# 打印每个搜索的分数\n",
    "print('grid scores :\\n')\n",
    "for i in gsearch.grid_scores_:\n",
    "    print(i)\n",
    "# 打印最佳参数\n",
    "print('\\nbest params : ', gsearch.best_params_)\n",
    "# 打印最高分数\n",
    "print('\\nbest score : ', gsearch.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "grid scores :\n",
      "\n",
      "mean: 0.99954, std: 0.00005, params: {'seed': 0}\n",
      "mean: 0.99955, std: 0.00006, params: {'seed': 100}\n",
      "mean: 0.99954, std: 0.00005, params: {'seed': 200}\n",
      "mean: 0.99953, std: 0.00007, params: {'seed': 300}\n",
      "mean: 0.99953, std: 0.00008, params: {'seed': 400}\n",
      "mean: 0.99954, std: 0.00007, params: {'seed': 500}\n",
      "mean: 0.99954, std: 0.00007, params: {'seed': 600}\n",
      "mean: 0.99952, std: 0.00006, params: {'seed': 700}\n",
      "mean: 0.99953, std: 0.00007, params: {'seed': 800}\n",
      "mean: 0.99956, std: 0.00005, params: {'seed': 900}\n",
      "mean: 0.99951, std: 0.00007, params: {'seed': 1000}\n",
      "\n",
      "best params :  {'seed': 900}\n",
      "\n",
      "best score :  0.9995585963363496\n"
     ]
    }
   ],
   "source": [
    "reg_lambda = list(gsearch.best_params_.values())[0]\n",
    "tree_param_grid = {'seed': list(range(0, 1001, 100))    # 随机种子\n",
    "                  }\n",
    "gsearch = GridSearchCV(\n",
    "    estimator = xgb.XGBClassifier(silent = 1,\n",
    "                                  scale_pos_weight = weights,\n",
    "                                  n_jobs = -1,\n",
    "                                  eval_metric = 'auc',\n",
    "                                  n_estimators = 400,\n",
    "                                  max_depth = 6,\n",
    "                                  min_child_weight = min_child_weight,\n",
    "                                  subsample = subsample,\n",
    "                                  colsample_bytree = colsample_bytree,\n",
    "                                  reg_alpha = reg_alpha,\n",
    "                                  reg_lambda = reg_lambda\n",
    "                                 ),\n",
    "    param_grid = tree_param_grid,\n",
    "    cv = 5,\n",
    "    n_jobs = -1)\n",
    "\n",
    "gsearch.fit(X_dtrain, y_dtrain.ravel())\n",
    "\n",
    "# 打印每个搜索的分数\n",
    "print('grid scores :\\n')\n",
    "for i in gsearch.grid_scores_:\n",
    "    print(i)\n",
    "# 打印最佳参数\n",
    "print('\\nbest params : ', gsearch.best_params_)\n",
    "# 打印最高分数\n",
    "print('\\nbest score : ', gsearch.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "XGBoost Accuracy  :  0.999602073897218\n",
      "XGBoost Recall    :  0.8439716312056738\n",
      "XGBoost Precision :  0.9083969465648855\n",
      "XGBoost F1 score  :  0.875\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n"
     ]
    }
   ],
   "source": [
    "seed = list(gsearch.best_params_.values())[0]\n",
    "# 训练XGBoost模型\n",
    "model = xgb.XGBClassifier(silent = 1,\n",
    "                          scale_pos_weight = weights,\n",
    "                          n_jobs = -1,\n",
    "                          eval_metric = 'auc',\n",
    "                          n_estimators = 400,\n",
    "                          max_depth = 6,\n",
    "                          min_child_weight = min_child_weight,\n",
    "                          subsample = subsample,\n",
    "                          colsample_bytree = colsample_bytree,\n",
    "                          reg_alpha = reg_alpha,\n",
    "                          reg_lambda = reg_lambda,\n",
    "                          seed = seed\n",
    "                          )\n",
    "y_pred = model.fit(X_dtrain, y_dtrain).predict(X_deval)\n",
    "print('XGBoost Accuracy  : ', metrics.accuracy_score(y_deval, y_pred))\n",
    "print('XGBoost Recall    : ', metrics.recall_score(y_deval, y_pred))\n",
    "print('XGBoost Precision : ', metrics.precision_score(y_deval, y_pred))\n",
    "print('XGBoost F1 score  : ', metrics.f1_score(y_deval, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5,1,'模型学习后特征重要性排序')"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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61//IjMzk3bt2gFer3SrVq0AqFWrFt9++23gvk2bNqVXr16sXbuWN954g27dugEwYsQILr30Ul5++WWOHDkSGEuMgWaWcLxrfVoTXudcqnOuNrADuMI5V9s5971zzsXZ5XFggnMufn89YGbJZrb6ZMcrIiIiIiJyMuXl5TFx4kSmTJkCQNWqValWrVqhevv37+eVV16hfv36mBk9evQgLS2NVatWsWLFCjIzMwPbP3DgAHXq1AGgRo0aZGVlccUVV7BkyRIyMjLIz8/nnXfeidTfunUrS5cu5cYbbwwsC2oPvB7qJ554IrLPjTfeyJQpU1i8eDHPPvssffr0ibsvwFtvvcXRo0epUqUK7733Ht9//z0TJkxg//793HPPPYGxvPfee9GnWhn4f8e73mfsc3jN7DqgqnPuL8er65ybAcwws3iJs4iIiIiISImbMmUKo0aNIjExsch6iYmJvPDCCwwePJhVq1Zx5ZVXUr58eQBatmzJli1baN68eaH9KleuTG5uLuAlzUePHqV58+aRfdu0acOWLVsAOHToELfccgszZsygbNmygWVB7c2ePZvOnTtz0UUXRY47ePBgmjZtylNPPcWVV15JgwYNAvcNe+CBB6hTpw7PPvssCQkJDB06lLp16zJ06FCSkpICY1m7dm30qb4AfHi8630mP5boV0A7f9jzV0A9/7eIiIiIiMhP0pIlS5g2bRqhUIh169Zx2223FaqTkpLC8uXLAdi7dy+JiYl0796dXbt28f3337No0SKaNWsW2H7r1q0j82LXr19PgwYNGDx4MOvXr+fIkSP87W9/4/LLLwdg2LBh3HLLLbRp0yayf2xZUHsLFy5k3rx5kXPo1asXAC1atOCf//wnEyZMiLvv3LlzmThxYoFza9SoEVu3ejNcV69eTf369QNjadSoUfSptgE+O971tvijiU8dM9sOhJxz26PKQsCDzrlQvH2ccw2O064DmD59+kmKVERERERE5ORJTk6O/B0KhUhLSyv097Zt2xg8eDBmRrdu3fjDH/7AsmXLSElJoVy5ciQnJzN69Gg2btzInDlzIqsxA3z33Xd07NiRrl27smDBAlauXMmOHTu4+eabcc5x/fXXM2nSJBYsWEDfvn0jc3BvuOEGLr300kJlY8aMoWPHjrRp04aFCxeycOHCAj270XHPmjWLnTt38oc/eOsRHz16tNC+derUYeDAgWRnZ3PhhRfy/PPPU7ZsWUaOHMm///1v9u3bx+zZs9m5c2ehWEaPHk2ZMpFByuuAIc65DUVdbyW8IiIiIiIip0l0wnuq5OTksHjxYjp16kTt2rV/dHu5ubnMnz+fVq1aRR5DdDr2DeI9tRacc1as+iWR8J4qSnhFRERERORMdjoS3tLsRBPeM3kOr4iIiIiIiMgPVip7eEvTOYmIiIiIiIhHPbwiIiIiIiIiKOEVERERERGRUqrM8av89MyYMaOkQxARERERkZ8ILSRVeqmHV0REREREREolJbwiIiIiIiJSKp1xCa+Z9TazbWaWbWYDosqvNrNlJRmbiIiIiIiI/HSccQkvMAEYAtQCFgGYWXlgOlCspadFRERERETONHv27GHx4sV8/fXXJ6W9Xbt2sWTJEvbt23dS2iuNzsSEtzqww3ly/LI/AP8owZhEREREROQskJWVRcuWLQEYPnw4HTp04KGHHopsL25ZrJycHHr16kVGRgZXX3012dnZkeN17NgxUm/NmjVcc801JCUl8cgjjwCQn59P7969SUpK4rnnngNg8+bNDBgwgA8//JDOnTuTl5fH1q1b6dq1Ky1atGDixImRNjdt2kSfPn0ir0eMGEEoFCIUCtGgQQNefvllAN5//33+8z//s1Ds06dP58EHHwSgT58+kX1r167NihUreOmll+jYsSNXXnkl7733XvEu9GlyxiS8ZjbazL4C6gGrzOwrM6toZj8H+gDjSzZCEREREREp7e666y5yc3N5/fXXOXLkCCtWrGDr1q1s2bKl2GVBMjMzefTRR7nvvvvo3r07a9asIScnh6FDh3LgwIFIvTFjxjBr1izS09N57bXX2LZtG08++SStW7fmww8/5NVXX2Xfvn1kZmYya9Ysxo0bx8UXX8y2bdtITU1lwoQJrFu3jnfffZfs7Gw+/fRT7r77br799tvIMaZPn05aWhpLly7l0ksv5frrr2flypWMHz+e/Pz8AnHv3r2bCRMmRF6/+eabpKWlMX/+fC6//HIuvfRSHnvsMZYtW8Zbb73FmDFjTvI78uOcMQmvcy7VOVcb2AFc4f+dizeU+XbgYLx9zSzZzFafnkhFRERERKQ0Wrp0KZUqVaJ27dqkpaXRv39/ALp160Z6enqxy4J07tyZ9u3bs3z5cjIyMujQoQMJCQnMnTuXqlWrRurt2bOHevXqYWbUrFmT7777rsAxOnXqxOrVq+nXrx/169dn/vz55OTk0KhRI2rWrElmZiZZWVkcOnSIxMREqlSpwmuvvRYY02uvvUbPnj2pVKkS9erVY+bMmYXq3HPPPYwaNapQ+VNPPUVKSgo7duzgkksuoUyZMtSsWZP9+/efwBU/9c705/COADY455abWYN4lZxzM4AZZuZOV2AiIiIiIlJ65OXlMXHiRN544w1+9atfceDAAerUqQNAjRo1WLNmTbHL4nHOMXfuXKpXr07ZsmU599xzC9VJSkoiNTWVGjVqsH37dpo3b17oGFmWPAb8AAAgAElEQVRZWQDs37+fV155hfr162NmXHfddTzxxBPs3LmTLl26UKZMGWrVqhU3npkzZ/J///d/ANSpU4ft27cX2J6WlkbFihVJSkoiLS0tUn748GHefvttli1bxpEjR9i2bRvvvPMOf//737n22muPc6VPrzOmhzeO64F+/lDnVcCVZraqhGMSEREREZFSZsqUKYwaNYrExEQAKleuTG5uLuAllkePHi12WTxmxrRp02jevDnz5s0LrDN9+nSaNGlCamoq9957L2YW9xiJiYm88MIL5Ofns2rVKqZMmcLzzz/PpEmTyM3NZfHixXFj+de//kXt2rUL9C5HC98AmDx5cqFtixcvpnPnzpxzzjmULVuWRYsWkZeXx5///Gfuu+++uMcsCWd0wuuc6+mcq+UPb74C+Ltz7oqSjktEREREREqXJUuWMG3aNEKhEOvWreOtt96KDE9ev349DRo0oHXr1sUqCzJ16lRmz54NwN69eyOJdayEhAQaN24MwKBBgwACj5GSksLy5csLtLdt2zZ27NjBwYMHWbNmDWbxH3Izd+5cbrjhhrjb161bx+7du+nTpw933HEHzz//PK+++ioAr7zyCn379o3UrVKlCnl5eQwaNIiLL744bpsl4Uwf0iwiIiIiInLKhZNHgFAoxLx58+jYsSNffvklCxYsYOXKlZhZsco2btzInDlzCqzanJycTP/+/Zk5cybNmjWjW7ducWO5//77mTp1aiRhHTp0KD179uSDDz5g48aNtGvXjgsuuIDBgwdjZnTr1o3GjRszfvx4QqEQ2dnZ9OrViy5dusQ9xuLFixk9enTc7W3btmXDhg2AN7Q5LS2Nfv36AZCRkUHz5s0jdfPz83n00UdZuHDhca7y6WfOlZ5pr+E5vNOnTy/pUERERERE5CciOTk5sDwnJ4fFixfTqVMnateufUJlJ9uXX35Jeno63bt3p1q1aqfkGD8F4ZsAzrn43dfR9ZXwioiIiIjI2SxewitnHiW8eKufiYiIiIiISOlyognvGb1olYiIiIiIiMgPpYRXRERERERESiUlvCIiIiIiIlIqlcrHEs2YMaOkQxARERGRYtBiQSJyKqmHV0REREREREolJbwiIiIiIiJSKpVYwmtmvc1sm5llm9kAv6yzmS2JqZdkZpv9uteVTLQiIiIicqrs2bOHxYsX8/XXX5d0KKfc1q1bWbZsGYcOHTop7e3atYslS5awb9++k9KeSGlTkj28E4AhQC1gkZm1BeYQNa/YzMoBc4GRQBtgqplVLIFYRUREROQUyMnJoVevXmRkZHD11VeTnZ1NVlYWHTt2jNQZN24coVCIUChEkyZNmDx5Mp9//jmhUIguXbqQnJyMcy7uMTZt2kSfPn0ir9euXUtSUhKdOnVi/PjxAKSnp9OoUSNCoRBdu3YFvOS0a9eutGjRgokTJwKwZs0arrnmGpKSknjkkUcA4sYSe9z333+flJQUFi1aRM+ePQHYu3cvnTp1IikpiQULFgCwatUqOnXqRPPmzXn22Wfjxrd582YGDBjAhx9+SOfOncnLy/sR74RI6VSSi1ZVB3Y47/8IOWaWAvwBLwkOa+fXWQpgZu8BVwGLTnewIiIiInLyZWZm8uijj9K+fXtycnJYunQps2bN4sCBA5E64aQUoF+/fgwZMoSnnnqKp59+mssuu4wePXqwYcMGmjdvXqj9Tz/9lLvvvpv9+/dHyp555hneeOMNatWqRdOmTbnjjjvIyMjgySefpEePHpF6qampTJgwgaSkJK666ipGjhzJmDFj+Otf/0rdunVJSkqib9++zJw5s1AslSpVKnTcTZs28corr1CtWjXatGnDoUOHeOCBB7j11lsZPHgw11xzDddddx2TJ0/m5Zdfpnbt2jRr1ozhw4cHxpeZmcmsWbNo2LAhGzZsYNu2bTRu3PikvTcipcFp7+E1s9Fm9hVQD1hlZl/5vba3AltjqtcFMqNefwY0Oj2RioiIiMip1rlzZ9q3b8/y5cvJyMigR48ezJ07l6pVqxaqu2rVKurWrUudOnWYNGkSl112GQDffPMN5513XmD7VapU4bXXXitQNn36dGrVqkV+fj6HDx+mYsWKrFy5kokTJ9KyZUtSU1MBqFmzJpmZmWRlZXHo0CESExPZs2cP9erVw8yoWbMm3333XWAsQccdOXIk5cqVY86cOVx00UWUL1+e5cuX069fPxISEmjcuDHbt2+nZs2arF+/nm3btkXOKyi+fv36Ub9+febPn09OTg6NGulrskis097D65xLBVLNbDsQcs5tD28zs9jqCcB3Ua8P4A2BLsDMkgGtaS8iIiLyE+ScY+7cuVSvXp2yZcty7rnnBtZ7/PHHC/T2AsydO5emTZty4YUXBu5Tq1ahr44Rjz76KDfffDNly5Zl2LBhXHvttRw+fJjWrVszcOBArrvuOp544gl27txJly5dKFOmDElJSaSmplKjRg22b99eoFf5eLEAZGVl8eqrr9K0aVMAypQpQ+XKlQGoUaMGWVlZ9OnTh/nz57No0SL69u0LEBhfzZo12b9/P6+88gr169cP+i4tctY701dpzgESo16fCxyNreScm+Gca3PaohIRERGRk8bMmDZtGs2bN2fevHmBdfbu3cvu3btp2LBhpGzr1q388Y9/5LHHHjvhY3700Ue88847jB07FiCS0FaoUCHS0zplyhSef/55Jk2aRG5uLosXL2b69Ok0adKE1NRU7r333kiSWdxYGjRowOuvv05aWhpfffUVCQkJkW379+/n6NGjPP/880ybNo3HHnuMZcuWsXnz5sD4ABITE3nhhRfIz89n1apVJ3wdREq7Mz3h/QfePN6wNsDOEopFRERERE6yqVOnMnv2bMBLahMTEwPrvfnmm5GFnsBb7GrgwIE899xzVKtW7YSOuX37dkaNGsWcOXMoW7Yszjmuuuoq9u/fT1ZWFmvXrqVRo0Zs27aNHTt2cPDgQdasWYOZRYYeAwwaNOiEYunTpw+ffPIJR48e5eDBg1SqVImmTZuyevVqANavX0/9+vXJzMxk79697N27l48//hgzC4wvJSWF5cuXH/faiZzNSnLRquNyzn3lP7bofmAT8EvgnhIOS0REREROkuTkZPr378/MmTNp1qwZ3bp1C6z37rvvctddd0VeT5kyhc8//5wxY8YA3sJWR44cYePGjYwePbrIY957773s2bMnkrBOnz6dO++8k5YtW1K5cmUefvhhqlWrxvjx4wmFQmRnZ9OrVy+6dOkCwP3338/U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2QQGBnLTTaX/s3Jh5fqjjz4iMjKSc+fOcfDgQdLS0hgyZIg7b8SIEcTFxfHJJ5+wcOFCcnNz6dWrFwkJCbz++uuEh4dTrVo1ioqKCAwMLDWvpzwRERERuOid2crq/Pu92dbaryu6FhGRa6Fjx47uRrZ169Z8+eWXtGzZ8iePl5KSwuLFi7n11lvp06cPO3fu9Bh77733+Oijj5g8eTLLli1zn797924++OADtm517yPIF198QUBAgHvF2cvLy/1ZYWEh586d81hLz549Aahduza+vr7k5+czYcIEXnvttVJ5FxrVatWquVeMZ8+ezZo1azDG8NRTTxEbG4u3tzfFxcX4+flRWFiIt7e3x7x77733J98/ERERqTpuhK8lehBtViUiVVjPnj355ptv+O6779iyZQstWrT4WeOFhISQkZEBQFJSEsHBwR5jNWrUoF69erRs2dK9OVZmZiZPPPEEq1atKrW6GxMTQ79+/dzHzZs3dz8uvXfvXoKDgy+r48SJE3Tr1g2Xy8WBAwc4efIkp0+f5uDBgzzyyCP8/ve/Z9OmTSxYsIBOnTpRWFhIdnY2KSkp7nqzsrI4deoUycnJGGNo06YN8fHx7nkbNWrkMU9EREQEboAVXuA+YOgPZomI3KCmTp1K165dufnmm3n88cdp0qRJuc9dtWoVN998MwMGDHDHZs6cydixYykqKuL222/n/vvv584777wsBjB58mQWLlzoPjcyMpK8vDz3jsqLFi2iSZMmxMbGMnbsWHfemDFj+OMf/0j79u3x8fFxP2Z8MT8/P/r3789///d/U7t2bd5++20aNGjAgQMHgJLm+sUXX2TcuHHUr1+f1q1b4+3tzcsvv4yfnx9RUVHuXav79OlDeHg4v/71r+nduzc7d+5k//79tG/f3mOeiIiICID54ddnr8GkxmQCDmtt5kUxB/CitdZxUawOJZtZ1bHWen5ervS4FmDVoKZXt2ARkatkSMyBii7hqvnqq69ITU0lIiKiXO8WXy1HjhwhPj6enj17Xvaes4iIiFRtF57kstaW65GuCml4rxU1vCJS2VWlhldERETkelPDC1SlaxIREREREZESP7bhvRE2rRIRERERERH50dTwioiIiIiISJWkhldERERERESqpBvha4l+tNWDm1V0CSJSRWnTKREREZEbh1Z4RUREREREpEpSwysiIiIi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GhMmTGDYsGGMGjWKl156CT8/P959912OHTuGv78/tWvXBkoerV67di3Nmzf/wXmXLFnC3/72N3x9fT2OV7t2bTIzM0uNU6tWLffPfn5+5ObmMmnSJObMmcM999zDH/7wB9auXesxLyAgAIBJkyYxfvx4AB588EHeeecdcnNzGTx4cJn3TURERER+vErR8P5c1trFwOILjzSLSOW0e/duPvjgA7Zu3XrF2KVSUlJYvHgxt956K3369GHnzp289957fPTRR0yePJlly5a5cxs1asT69evp3LkzR48eJSAgwOMcX3zxBQEBAe5mvazxLnXTTf95MKawsJBz585x5MgRhg4dCkCnTp1ITEz0mAewYcMGjh07xvDhwzl9+jRxcXGsWLECgHbt2nHffffh4+NTrvspIiIiIldWKR5pFpGqLzMzkyeeeIJVq1a5V1k9xTwJCQkhIyMDgKSkJIKDg6lRowb16tWjZcuW7s2y+vbty1dffcW5c+c4deoUt912W5lzxMTE0K9fP/exp/E8qVWrFkePHsVay6FDh6hfvz7+/v4cO3YMay2ffvopwcHBHvM+/fRT5syZw9KlSwEoLi4mLS2N06dP8+9//5uMjAyqVasS/w4pIiIiUino/6xE5LqIjIwkLy+PYcOGASXv9E6ZMuWy2KeffsrNN9/MgAED3OfOnDmTsWPHUlRUxO233879998PwOTJk1m4cKE7b/Lkye7Hlh9//HF8fHx49NFHL5ujSZMmxMbGMnbs2FI1XjqeJ08++ST9+vUjODiYrl27Ur16debMmUP//v0pKCjA4XBw1113ecx74oknOHnyJBEREQC8//77DBo0iIYNG3Lu3DkmTpzIrbfe+jPvtIiIiIhcUKl3aT4fcwAvapdmkcoqqaILuO727t3Lv/71L/r06VPq0eWfmiciIiIi5fNjd2muVA3vz6WGV6Qi/PIaXhERERGpGDfk1xKJiIiIiIiIXG1VdIW36lyTiIiIiIiIlNAKr4iIiIiIiAhqeEVERERERKSKUsMrIiIiIiIiVVLV/B7eF8v1OLeI/JAX9T68iIiIiNy4tMIrIiIiIiIiVZIaXhEREREREamSKl3Da4yJMMZkGGNyjDGDjTEhxpgYY8xHxpiHKro+ERERERERuTFUuoYXmAY8DPgDW4H1QAwwAZhpjGlagbWJ/CJlZ2fTuXNnAFwuFxEREYSGhrJ06VIA0tPT6datG61atWL69Oll5l3JZ599Ro8ePX4wFhERQWpqapnzeoolJyfTvXt3QkNDeeWVVwA4fPgwDoeD8PBwRo0ahbWWr7/+moYNG+JwOHA4HOTk5HD27Fl+9atfuWP79u3jzJkzDBo0iA4dOtCvXz9cLhcul4vBgwdz7733Eh4eTn5+PgBTp06lXbt2PPnkk+5raNWqlXu82NjYH/fLEBEREZFyq4wNb20gy1prKdlUK9pau95amwzsAe6s0OpEfmHy8/MZPnw4RUVFACxYsIA2bdqwa9cu1q5dS0FBAdHR0UybNo3U1FQ2b95MTk6Ox7yyWGt55plncLlcV4ytXLmSxo0b06pVKwCP83qKjRs3jmXLlhEfH8+6devIyMhg0aJFLFy4kG3btpGVlcW+ffvYvXs3kyZNwul04nQ6qV+/PmlpaQwZMsQd+81vfsOmTZu46667SEhIoFmzZrz//vt8+OGH9OrViy1bttCzZ0/++te/8umnnxIfH8+ePXvw9/dn69at5Obm0rRpU/d4lzb0IiIiInL1VJqG1xgz1hhzFAgCEs//XGCtXWxKdAHuAuIqtFCRXxgvLy9iYmLw9fUFwOl0MmjQIADCwsJISkqibt26pKWlkZ2dzenTp6lVq5bHvLIsW7aMrl27XjGWl5fH+PHjqV27Ntu3bwfwOK+nWF5eHkFBQRhjqFu3LidPnmTGjBk0a9YMgNzcXOrVq0dCQgJLlizh7rvvZuLEiQAkJCTwz3/+k9/+9rf88Y9/5OzZs9StW5f9+/dTWFjI/v37ufPOO3nggQcYMWIEADk5Ofj7+7Njxw4efPBBjDH07NmTnTt3snv3bvbs2UPHjh353e9+d8V/CBARERGRn6fSNLzW2mhrbQCQBbSz1gZYa787//Eg4B/ABmvtiUvPNcaMMsaU/X/TIvKT+fr64ufn5z4uKioiMDAQgDp16pCdnU2vXr1ISEjg9ddfJzw8nGrVqnnM8yQ3N5cVK1bw7LPPXjE2b948Bg4cyOjRo3nnnXf4+9//7nFeT7HQ0FCio6NZtWoVmZmZtGzZ0j1uTEwMzZs3p0GDBtx33304nU4SExP55JNPSEtLo127dmzdupU9e/bgcrn44IMPaN68OQCvv/46t912G3fccYd7vPT0dLZt28aDDz7o8R7ccccdbN68mY8//piWLVuybNmyn/srEhEREZEy3BDfw2utjTHGbAbijTEbrbXOSz5fDCw2xuhLQ0WuMW9vb4qLi/Hz86OwsBBvb29mz57NmjVrMMbw1FNPERsb6zHPk+eff55Zs2ZRvXr1K8ZSUlKYO3cuAQEBDBo0iNjYWLKysi6b93//938viy1atIjt27czZcoUIiMjMabku7rT09OZO3cuW7duBaBjx47UqFEDgNatW/Pll1/Sp08fd6xt27Z8+eWXpKamEhkZScuWLVm/fj2zZs1i5syZnD59mkceeYTFixdTvXp19z0AKCws5Ny5c9xxxx3u62rbtq3e4RURERG5hirNCq8nxpj/zxhzD4C19jglm1g1r9iqRH7Z2rRpQ3x8PAB79+6lUaNGZGRkkJWVxalTp0hOTsYY4zHPkx07dhAZGYnD4SA1NZXJkyd7jIWEhJCeng5AUlISwcHBHuf1FPPy8qJJkyYADBs2DCh5N3nIkCEsXbrUvYLds2dPvvnmG7777ju2bNlCixYteOihh9i7dy/ff/897733HnfddRf5+fns27cPgI8//tjdQI8YMYJHHnmEtm3blnmvJk2axD/+8Q8A1q5dy1133XVVfz8iIiIi8h+mZG+oysMYkwk4rLWZxpjbgY+BdsBJIAEYbq1NLONcC2CnXqdiRaq6F//z94PD4cDpdPKvf/2L3r170717dz7++GMSEhLYtGkT48aNIycnhz59+rBixQr+/e9/X5a3Y8cO9u/fz9ixYz1Od2EOT7EjR47w6KOPcuLECWrWrMn69euJi4u7bF5PtXh5eTF8+HAeffRR927TkZGRvPPOO+5GOCoqinPnzjFmzBhuvvlmRo0axdixY/nss88YOnQo1loeeOABZsyYwaFDhxgyZAiff/45LVq0YP369aSlpdG/f3/at28PQL9+/Rg3bhydO3embdu2bNq0iU2bNnHLLbfwu9/9jqKiIu655x7efPPNUivZIiIiIlK2CwsN1lpTrvzK3PCeP34EmA6cA1621kZf4Vw1vCJX04ue/344cuQI8fHx9OzZs9T7vT81ryorLi5m48aN3H333aXe9RURERGRH++Gb3h/DjW8IldZGQ2viIiIiEhF+LENb6V+h1dERERERETkp6qaK7xV6JpERERERESkhFZ4RURERERERFDDKyIiIiIiIlVUtYou4Jp4sVyr2yJSFm1W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TMuWLalVqxa//vorL774Ik899RRdunQhJSUl3zVERERERO5EhXlo1YPAUWutNcaUAEKstbsAjDE7gYdzBhtjHgEetdZ+dftLlTvN5s2bOXHiBEFBQezcuZOQkBAmTZrken3fvn0MGzaMwMBAPDw8iImJwdfXN99848eP58cffwTgwIEDeeYCeca8vLyoVasWCxYscOU5fvw406ZNY/v27SxYsIDPPvuMwMBAunTpQp8+fWjUqBHr16+nTZs2AMyaNYudO3e65vft25cjR464np86dSrPGpflnBsQEEB0dDQA//d//8fRo0f59NNPefTRR/n000/5+OOP+eCDDxg9enSeNURERERE7lS3fYfXGDPYGHMCqALsyH58wlq7Pfv1+4HGQOwVU18DPrytxcodyel00r9/f7y9vVm2bBnbtm1j+fLlNGrUiH79+nHp0iV8fX0JDAwkPj6eJUuW0LZt23zz/fOf/yQhIYEnn3wSwO1cd2Pbt28nNjaWJk2a0KVLF86dO8e2bdto27YtpUqVol27dmzevBkvLy/69OnDgQMH+OSTT+jcuTMAP//8M59//jnPPPOMq5YJEybQsGFD13N3a+Q397Lp06fz6quvcuDAARo0aACAp6cnZ8+edbuGiIiIiMid6rY3vNbaqdm3Jx8FGmbfrnw+R8gwYL21NvHygDHmPiAQWOgupzFmgDEm7lbWLXeOuXPn8oc//IHhw4cTGxvLqVOnWLt2LbGxsTidTr7++mtXbFRUFJmZmZQtWzbffEOHDmXKlCl5xt3NzTlWo0YNVq1axZYtW/Dz8yMiIoK0tDQqV64MQPny5UlOTnbNXb9+PT/99BOenp4AhIWFER4eTsmSJV0xVapUyVWDuzXymwuwevVqmjVrRqlSpejcuTNTp04lOjqad99919UcX7mGiIiIiMidqkid0myMqQu8DAy54qUgINpam+5unrV2prXW/1bXJ3eG+Ph4BgwYgJeXFy+88AI7d+6kYsWKAPj7++c6GGrUqFG88MILzJ49222uuXPn0rJlS6pXr57nNXdzc47VqFEDHx+fXOuWKVOG9PSsf4xTU1PJzMx0zX355ZcZP348kydPZtOmTdx3330EBARc9VrdrXG1uZ9++imhoaEAPPXUU0yePJnVq1dTunRpmjdvftW1RERERETuNEWm4TXGlAMigUHW2uNXvNwN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Z3jyyScB6Nq1K3/605+YOXMmqampDBmS9WtUp0+fZvjw4cyaNcuVKzMzk+bNm+Pv78/KlStZuXIllStXJiQkhJMnT1KpUiXmzJnDvffeS0REBMeOHeOtt97Kd2716tXzrHs9a1w595tvvslzbYGBgYSEhLBv3z7q1KnD4sWLqVy5cp76Ll68mGeNlJQUunTpQlpaGgEBAXz00Ue5dsRFRERERIq76z20qsg2vNljHYApwH3AHGvtyGvkVcNbxH3VZcVNzZeens6KFSto0KABNWrUuCVzb2QNERERERG5ee6IhvdWUcNb9N3shldERERERH4/1PACxemaREREREREJEuR/h1eERERERERkdtFDa+IiIiIiIgUS2p4RUREREREpFi6u7ALuBU6Le1Y2CX8LulAKhERERERKUq0wysiIiIiIiLFkhpeERERERERKZYKreE1xgQZYxKNMSeNMd2NMb2zH583xryXI26VMSbZGHMi+69iYdUsktOhQ4fYsGEDFy5cuClxIiIiIiJycxXmDu9YoDfgCWwDRgNtgEeA7saYptlxjwIVrbVe2X8/FkaxUnDJycnUr1+flJQUOnTogL+/PwMHDsz1evPmza+a48iRIzgcDlq1asWAAQNy/bby3r17adOmDZDVTLZu3Zp69eoxbty465oL8I9//IPOnTu7nu/YsYMWLVrg5+fH7NmzXeNOp5NmzZpx/PhxADZu3Mgrr7zC6tWr6dChAwDx8fE0bdqUFi1aMGbMmHzjLo/379/f9XzFihU0a9YMPz8/VqzI/V3oGTNmMHr06Ku+XyIiIiIikldhNrwPAkdtVjdSAgix1u6y1v4A7AQezt7N/clam1mIdcp1Gjp0KOnp6cybN4+ePXsSFxfHuXPniIuLIyUlhdDQUNLS0q6aY8aMGXz88cesX7+eo0ePsmfPHgCstQwZMgSn0wnA1KlTGTt2LLt27WLVqlWcPHmywHO///57hg0bxtmzZ13rTpw4kS+//JL4+Hjeffdd1/j//u//8uyzz1KpUiUgq1FeuHAhEydO5OzZs1y4cIHp06ezZMkSNm3axMKFCzl79qzbuG3btjFmzBhXHQDh4eGsX7+erVu38tZbb7nGf/rpJ8aOHXsjH4eIiIiIyO/WbW94jTGDjTEngCrAjuzHJ6y127Nfvx9oDMQC9YHqxphjxpijxpj++SaWImH9+vWULl0aLy8vKlSowN69ezlz5gxHjx6lSpUqlChRgsjISMqVK3fVPBMmTKB27doAnDp1ioceegiAiIgInnrqKVdchQoVSEhIIDk5mQsXLuDh4VHguWXLluXvf/97rnUrVKjA7t27SUxMdM07ePAgf/3rX7l48SJxcXEAvPzyy9xzzz3Mnz+f6tWrU6pUKWbMmIGnpydOp5NLly5x//33u42rUqUKs2bNyrXu/fffz4EDB0hISKB69equ8eHDhzNo0KCCfwAiIiIiIuJy2xtea+1Ua60XcBRomH2b8vkcIcOA9dbaRCATmABUBVoB7xhjvK7MaYwZYIyJuw3ly1VcvHiRcePGER4eDkCzZs04fPgwU6ZMoXbt2pQvX55y5crxwAMPFDhnZGQkvr6+VKpUiVOnTvH5558zdOhQ1+t//OMf2bZtG1OmTKFVq1bcfffdBZ7r6elJqVKlcq3XuXNnVqxYwdSpU3nmmWcAGDt2LMOGDaNnz568/fbbxMfHA1m3Zi9atIhatWrlyvH+++/To0cPSpYs6TaucuXK3HVX7n/1unXrxty5c5k1axbdu3cHIDo6mvvvv5+mTZsiIiIiIiLXr0j9Dq8xpi7wMvAEgLV2JbAy++WDxpgNQAtgYc551tqZwExjjEUKTXh4OIMGDcLDwwOAMWPGMH36dMqVK8f7779PREQEAwYMKHC+Q4cO8e6777J27VoA/vznPzNx4kRXI3l5zYULF2KM4fXXX2fNmjW0bdu2QHPdmTNnDosWLQKgU6dOdOzYkfj4eGbOnMl9991HYGAgmzdvpn79+nh7e7N48WKaN2/OiRMn8PLyYvv27Xz99deudQG3cTlduHCBTZs28fnnnwPQsGFD2rVrx7hx41i8eLGrwRYRERERketTZH6WyBhTDogEBllrj2ePBRlj/l+OsMpk7fpKEbR27VqmTZuGw+Fg165dJCYmsmfPHjIyMti+fTvGmALnSklJISQkhE8//dS1I7xx40bCwsJc+d98800SExM5evQov/76Kzt37sQYU+C57iQkJHDmzBnOnDnDvn37MMbg4+NDYmIiAHFxcVSrVo3OnTvz73//m8zMTH799VdKly5NUlISgwYNYv78+a7G2l3cldLT00lISODChQscO3aMxMREdu3axU8//UTnzp357//+71yNuIiIiIiIFExR2uH9ElhprV2SY6wu0N4YM4ysE5xrARsLozi5tk2bNrkeOxwOJk2aRN++fTl8+DABAQGEhIS4nbd+/Xr279/P4MGDXWPh4eEcOXKE1157DcjaLT5w4ECu/OPHjycgIACHw8HJkycJDAykVatWjBgxokBz3QkLC8PX15fU1FRefPFFHnnkEd555x0GDx5MWloa1atXp2PHjlSqVMl12/LLL79M2bJleemllzh9+jQ9e/YEsg7eevPNN/PEXcnDw4Pg4GAefvhhMjMzGTFiBC1btnQdthUdHU10dDTPPvtsgT4HERERERHJYnL+ZMttXdiYJMBhrU3KvpV5F/AzkJEdEg7MIKsRfhr4FzDEWptvw3v5luagJR3yC5Fb6KsuK64dJCIiIiIi8htdvmvUWlug20cLbYfXWuud4/FuIL+Cu9yWgkRERERERKRYKTLf4RURERERERG5mQrtluZb4fItzcXpmkRERERERCTL9d7SrB1eERERERERKZbU8IqIiIiIiEixVJR+luim6bS0Y2GXcEfSKcsiIiIiIlKcaIdXREREREREiiU1vCIiIiIiIlIsqeEVERERERGRYqlQGl5jTJAxJtEYc9IY090Y0zv78XljzHtXxN5tjNlrjGlaGLXKzfXjjz+ydu1azp07d9UxERERERGRG1VYO7xjgd6AJ7ANGA20AR4Bul/R3P43sM9a++3tLvL3Kjk5mfr16wPQr18/AgICGD9+fK7XmzdvXqBce/fupU2bNgAcOHCA7t278+2339KyZUsuXrzoduzIkSM4HA5atWrFgAEDsNayc+dOnn76aZo2bcp77+X6byIEBQWxa9cu1/N//OMfdO7c2fU8JiYGHx8fHA4HrVu3BuCHH37g4YcfxuFw4HA4OHnypNvrTUxMpGPHjjRv3pw33ngj3zF3793HH3/syl+vXj0GDhxYoPdMRERERERujsJqeB8EjlprLVACCLHW7rLW/gDsBB4GMMZUAoYDYYVU5+/S0KFDSU9PZ/HixWRkZLB161YOHTrEwYMHSUlJITQ0lLS0tGvmsdYyZMgQnE4nAAkJCURERPD2229To0YNEhMT3Y7NmDGDjz/+mPXr13P06FH27NnDa6+9RkREBDExMfz9738nMTERgC+++IKaNWtSr149AL7//nuGDRvG2bNnXXXExsby4YcfEh0dzbp16wDYvn07I0eOJDo6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PB1/gwYNaNiwYbl9f/rTn5Kens7y5ct55JFHuOOOOzh//jx/+MMfmDFjxg05DyIiIiIi4h21apVmY0wX4BfA9Oq0y7UZY4iPj6dz585s3Lix0nb9+vXdtxnn5eVRUlLiMc6hQ4eYOHEiAQEBPPnkk+zcuZO5c+cycOBA3nrrLcaOHUv9+vU99ouLi2PKlCnumVOAzp0707RpUwBCQkI4fvw4sbGxTJ06lcTERHr37u2ewf32228ZN24cCQkJ1K1b12N+nnLxdPyexMXF8fvf/54lS5ZQUFBASkoKL7zwAkuXLq1yPBERERERuTXUmoLXGNMASASmWGv/8X3tcm3Lli1j9erVAOTm5nLq1Kly235+fnTr1s19G3NmZma524TLatOmDSdOnADgwIEDtGrVCoCgoCA+//xzpk+fXmW/1NRU4uPjcTgcHD58mKeffprY2FgyMzMpLi5mw4YNdOnSxR0vOzubhQsXusceP34848aNIyTk2hP4FXOpePxlC+6yTp48yenTp/nmm284ePAgxhh27drFrFmz3DnPnTv3mmOLiIiIiEjtZErXjPLCwMacAhzW2lOu7S3AcWvtf1To57G9ipgWoOf8pBue760kfUEETqeTkSNH8u2339KxY0eWLFlSbjs+Pp5Lly4RFhbGo48+yrZt20hPT+fs2bO8++675VZtvnTpEk899RQ5OTkUFRXx/vvv07x5c1566SXatGlDbGzsNftd5XA4SEtLIzs7m9GjR2OtZciQISxZsgQofW72zJkzzJs3D4Bt27YxfPhwevbsCUBUVBTPPvtsuVhXVcyl4vHHx8djjKm075YtW5g2bZp7Fes//OEP1KlTp1LOIiIiIiLifVf/prfWmmr1rw0Fr+uW5cPAV0Cxq0scsNNTu7X2N1XEVMFLacFbXU6nk5SUFPr27eteVEpERERERKQ2ut6C946bms01WGsDy7zOBKpKuFoHIv+cRo0auVdqFhERERER8SVem+G9Ga7O8PrSMYmIiIiIiEip653hrTWLVomIiIiIiIjcSCp4RURERERExCep4BURERERERGf5LVFq26m0Je2ezuFG+p6Vl0WERERERGRUprhFREREREREZ+kgldERERERER8Uq0qeI0xg40xJ40x54wxo1xtdxhjso0xD3s7P19y4cIFUlJS+Oqrr7w+xhdffEFqaiqXLl26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fcSZM2e8nYqIiIiIiIhHta7gBRYCYwB/IA14CxgIRAIJ3kurZl28eJGBAwcSHh5OVFQUhYWFtGzZEofDgcPh4MiRIxQVFTFq1CjCw8N55JFHcDqdHmOdP3+eESNG4HA4GDNmDEVFRaxfv94dKzQ0lIiIiCrjvfTSS3Tv3p1nnnkGgKKiIgYNGsS+ffsYPHgwn376qcd+nto85QIQFBTkziclJYV9+/a5t/v160e7du08tn3zzTc89dRT9O/fn2HDhrlz/t3vfkfXrl2JiYlxjzFt2jQeffRRevfuzalTp278SRMRERERkVrFWGu9nUM5xphTgMNae8oYEwsMstbGuN77AHjBWnusin0twJlm99VUujfNh3NepG3btgwYMIDJkyfTtGlT8vPzWbZsmbvPxo0bOX/+POPHj2fZsmXcfffd/Pu//3ulWDNnziQ4OJjHH3+cWbNm0b59e8aNG+d+/+WXX+aBBx7gjjvuqBTv4YcfZubMmaSmprJw4UIefvhhmjZtysmTJ4mMjGTFihXUrVuXkJCQSv0aNWpUqS05OblSLoMHD+aZZ57hvffe8/hZ/PGPf+T06dNMnz69UtuPfvQjvv76a1544QXeeOMNcnJymDhxIoMGDWL//v289957FBUVERwczJYtW5g3bx6JiYns37+fV1999cadMBERERERuemMMQBYa011+teaGV5jzFRjzJdAC+AT1+uWQFaZbp8BbbyRX02bMmUKAwYMAODcuXPccccdbN68mR49ejBhwgSuXLnCkCFDGD9+vLuPv7+/x1jHjh0jOLj0bnB/f38uXrzofq+goIDk5GSGDx/uMd6uXbuIjo7GGENERAR79uyhQ4cOREZGcujQIdavX094eLjHfp7aPOWyf/9+MjIy6N27N8OGDePSpUvl8n/zzTfLzRqXbfMULz09nfDwcO666y73uMHBwcybN+97PysREREREfEdtabgtdausNYGAKeB7q7XBvi6TLd8wK/ivsaYicaYAzWTac3at28fTqeTAQMGkJqaSkZGBkVFRWzdutXd58SJE+zYsYPo6GiPMaKjo4mLiyMlJYWVK1cydOhQ93tr1qxh9OjR5fqXjZefn0/z5s0BaNy4MTk5Oe5+mzZtoqSkhHvvvddjP09tnnJp3bo127dv5+OPP6Zz586sWrXKPUZycjJ9+vThrrvu8tg2dOhQVqxYQVpaGq+88grDhw+/Zs5Op5OEhAQmTpx4fSdCRERERERuObX9e3idlC9w7wZKKnay1iYACVdvafYVFy5cYNq0afzpT38iICDAXfSFhIRw/PhxAL799lvGjRtHQkICdevW9RgnNjaWDh068Prrr9O7d28CAwPd761bt45Nmza5tyvGq1+/PgUFBQDk5eVRUvLdxz9//nyaN2/OypUrPfbz1OYpl8LCQnfuISEhpKSkuMd4++23+dWvflXueMq29e/fn2bNmvHOO+9Qr149wsLC+Oqrrzh79mylnK21TJgwgcWLF9O4cePrORUiIiIiInILqjUzvFU4APQqsx0C3BbLAhcWFjJixAiWLl1Kq1atiI2NJTMzk+LiYjZs2ECXLl0AGD9+POPGjSMkJOSa8YKCgsjOzmbhwoXutlOnTtGwYUPq16/vbqsYr1u3buzduxeAzMxMAgMDSUxMZNGiRQDk5ubi5+fnsZ+nNk+5zJkzx110v//+++5jKygo4PPPP6d169bu/Dy1PfTQQ2RlZfHKK69UmTPA7Nmz6dSpE0OGDPn+EyAiIiIiIre82r5olQH+CrxMaXH+EnC/tbawin19ZtGqjXNnM3v2bHfx179/f/70pz9hrWXIkCEsWbKEbdu2MXz4cHr27AlAVFQUsbGxzJw5k7feeqtcvFWrVnHmzBn3c6wACQkJ5OXluReD8hRv2rRphIWFERISQlJSEklJSTRv3pyYmBjOnTtHs2bN+P3vf8+dd95ZqV+rVq0qtd1///2Vcvniiy8YNmwY+fn59OrVi9dff526deuSnJzM5s2bWb58uTtnT207d+5k7dq15Y75scceo1GjRqSnp5OQkICfnx8dO3akT58+GGPo1asXS5cuvZGnTEREREREbrLrXbSqVhe8ru12wHKgAfAf1tr0a+zrMwVv87OnvZ2CW0FBAVu2bCE4OLjczGp1+lV33xutuLiYzZs388ADD9CxY8caG1dERERERG6eW77g/SFU8IqIiIiIiPiuW/ZriURERERERERuJJ+c4fWlYxIREREREZFSmuEVERERERERQQWviIiIiIiI+Kg7vJ3AzXC2eQtvp/BP02JVIiIiIiIiN4ZmeEVERERERMQnqeAVERERERERn+S1gtcYM9gYc9IYc84YM8oYM8b1+rIx5j/L9HvaGPOZMSbHGDPbW/mKiIiI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GTduHABz5szh1VdfpaCggE8//ZSTJ08SGRnJihUrqFu3LiEhIcycOZPU1FQWLlzIww8/zE9+8hN37JdffpkHHniAfv368cwzz/Dee++53zt48CBbtmxh3rx5JCYmsn//fl599VX3+3/84x85ffo006dPr3bbhQsXCA8PJy0tjfr165OVlcVrr73G7373OxISEvj666+ZMWPGDztJIiIiIiLidcYYAKy1pjr9a3SG11q7wlobAJwGurtuU75sPVfddwO/AR4COgNjjTGVKzzAGDPRGHPgpiV+k02ZMoUBAwYAcO7cOXr06FFu29/f39337Nmz5OTkeCx2AZo0aUJ2dja5ubmcPn2aFi1akJ6ezubNm+nRowcTJkzgypUrHDt2jODgYAD8/f25ePEiAH/961/JysqiZ8+eAHTo0IHIyEgOHTrE+vXrCQ8PZ9euXURHR2OMISIigj179rjHLygoIDk5meHDh7N//34yMjLo3bs3w4YN49KlSwQHBzNv3jyPxwbw5ptvumeNq9v2/PPP06JFC9atW0dBQQF+fn78/e9/Jy8vj6ysLB588MHrOBsiIiIiIuIrau0qzdbav1hrf2mtLbTW/i/wJ+CRKvomWGs9V4C3kH379uF0OgkNDfW4DRAfH8/kyZOrjNGnTx8+++wzli9fTvv27WncuDHdu3cnNTWVjIwMioqK2Lp1K9HR0cTFxZGSksLKlSsZOnQoADNmzGD58uWV4m7atImSkhLuvfde8vPzad68OQCNGzcmJyfH3W/NmjWMHj0agNatW7N9+3Y+/vhjOnfuzKpVq9z9nE4nCQkJTJw40d2WnJxMnz59uOuuu6rddvz4cXbv3s0rr7xC06ZNiY2NJSAggFatWvHaa6/x5Zdf0r179+qdABERERER8Sm1tuA1xoQZY9qVaWoOlHgrn5vtwoULTJs2jbffftvjNkBJSQk7d+7E4XBUGWfBggW8+eabzJ8/n3bt2rFq1So6d+5M06ZNAQgJCeH48ePExsYydepUEhMT6d27N4GBgaxevZp+/fpx//33V4o7f/58nnzySVauXEn9+vUpKCgAIC8vj5KS707LunXrGDFiBFBa8LZp06bcuADWWiZMmMDixYtp3Lixe9+3336bsWPHlhv3+9oyMzOJjo7mgQceIDIykuzsbN577z2ioqJ48cUXmT17drlne0VERERE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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x149624a8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 确定特征因子重要性\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "\n",
    "# 绘制特征重要性评分\n",
    "colours = plt.cm.Set1(np.linspace(0, 1, 30))\n",
    "fig = plt.figure(figsize = (16, 10))\n",
    "ax = fig.add_subplot(111)\n",
    "ax = xgb.plot_importance(model,\n",
    "                         height = 0.8,\n",
    "                         color = colours,\n",
    "                         grid = False,\n",
    "                         show_values = True,\n",
    "                         importance_type = 'cover',\n",
    "                         ax = ax)\n",
    "for axis in ['top','bottom','left','right']:\n",
    "    ax.spines[axis].set_linewidth(2)\n",
    "\n",
    "ax.set_xlabel('重要性评分', size = 16)\n",
    "ax.set_ylabel('特征', size = 16)\n",
    "ax.set_yticklabels(ax.get_yticklabels(), size = 12)\n",
    "ax.set_title('模型学习后特征重要性排序', size = 20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\r\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n",
       "<!-- Generated by graphviz version 2.38.0 (20140413.2041)\r\n",
       " -->\r\n",
       "<!-- Title: %3 Pages: 1 -->\r\n",
       "<svg width=\"3544pt\" height=\"1260pt\"\r\n",
       " viewBox=\"0.00 0.00 3544.00 1259.92\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 1255.92)\">\r\n",
       "<title>%3</title>\r\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-1255.92 3540,-1255.92 3540,4 -4,4\"/>\r\n",
       "<!-- 0 -->\r\n",
       "<g id=\"node1\" class=\"node\"><title>0</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1296\" cy=\"-1179.13\" rx=\"72.5877\" ry=\"72.5877\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1296\" y=\"-1175.43\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f14&lt;&#45;1.80796528</text>\r\n",
       "</g>\r\n",
       "<!-- 1 -->\r\n",
       "<g id=\"node2\" class=\"node\"><title>1</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1164\" cy=\"-982.539\" rx=\"72.5877\" ry=\"72.5877\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1164\" y=\"-978.839\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f4&lt;&#45;0.475413114</text>\r\n",
       "</g>\r\n",
       "<!-- 0&#45;&gt;1 -->\r\n",
       "<g id=\"edge1\" class=\"edge\"><title>0&#45;&gt;1</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M1255.5,-1118.42C1241.18,-1097.31 1224.97,-1073.42 1210.22,-1051.67\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"1212.94,-1049.44 1204.42,-1043.13 1207.14,-1053.37 1212.94,-1049.44\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1268.5\" y=\"-1077.13\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 2 -->\r\n",
       "<g id=\"node3\" class=\"node\"><title>2</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1394\" cy=\"-982.539\" rx=\"65.7887\" ry=\"65.7887\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1394\" y=\"-978.839\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f4&lt;1.66141391</text>\r\n",
       "</g>\r\n",
       "<!-- 0&#45;&gt;2 -->\r\n",
       "<g id=\"edge2\" class=\"edge\"><title>0&#45;&gt;2</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M1328.36,-1113.87C1338.61,-1093.52 1349.96,-1070.99 1360.3,-1050.46\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"1363.44,-1052 1364.81,-1041.49 1357.19,-1048.85 1363.44,-1052\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1355.5\" y=\"-1077.13\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 3 -->\r\n",
       "<g id=\"node4\" class=\"node\"><title>3</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1080,-799.402 960,-799.402 960,-763.402 1080,-763.402 1080,-799.402\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1020\" y=\"-777.702\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.197266027</text>\r\n",
       "</g>\r\n",
       "<!-- 1&#45;&gt;3 -->\r\n",
       "<g id=\"edge3\" class=\"edge\"><title>1&#45;&gt;3</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M1117.5,-926.221C1108.49,-914.981 1099.28,-903.115 1091,-891.745 1070.75,-863.921 1049.5,-830.576 1035.59,-808.083\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"1038.5,-806.132 1030.28,-799.447 1032.54,-809.799 1038.5,-806.132\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1125.5\" y=\"-880.545\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 4 -->\r\n",
       "<g id=\"node5\" class=\"node\"><title>4</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1164\" cy=\"-781.402\" rx=\"65.7887\" ry=\"65.7887\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1164\" y=\"-777.702\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f1&lt;1.99198556</text>\r\n",
       "</g>\r\n",
       "<!-- 1&#45;&gt;4 -->\r\n",
       "<g id=\"edge4\" class=\"edge\"><title>1&#45;&gt;4</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M1164,-909.646C1164,-892.762 1164,-874.726 1164,-857.698\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"1167.5,-857.245 1164,-847.245 1160.5,-857.245 1167.5,-857.245\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1171.5\" y=\"-880.545\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 5 -->\r\n",
       "<g id=\"node16\" class=\"node\"><title>5</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1394\" cy=\"-781.402\" rx=\"65.7887\" ry=\"65.7887\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1394\" y=\"-777.702\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f7&lt;2.87974524</text>\r\n",
       "</g>\r\n",
       "<!-- 2&#45;&gt;5 -->\r\n",
       "<g id=\"edge15\" class=\"edge\"><title>2&#45;&gt;5</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M1394,-916.885C1394,-897.833 1394,-876.828 1394,-857.196\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"1397.5,-857.072 1394,-847.072 1390.5,-857.072 1397.5,-857.072\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1428.5\" y=\"-880.545\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 6 -->\r\n",
       "<g id=\"node17\" class=\"node\"><title>6</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2272\" cy=\"-781.402\" rx=\"77.1866\" ry=\"77.1866\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2272\" y=\"-777.702\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f21&lt;&#45;0.392654777</text>\r\n",
       "</g>\r\n",
       "<!-- 2&#45;&gt;6 -->\r\n",
       "<g id=\"edge16\" class=\"edge\"><title>2&#45;&gt;6</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M1457.85,-967.057C1613.27,-931.806 2011.34,-841.521 2186.78,-801.73\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"2187.76,-805.096 2196.74,-799.471 2186.22,-798.27 2187.76,-805.096\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1840.5\" y=\"-880.545\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 7 -->\r\n",
       "<g id=\"node6\" class=\"node\"><title>7</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"678\" cy=\"-575.716\" rx=\"69.5877\" ry=\"69.5877\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"678\" y=\"-572.016\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f10&lt;1.07941794</text>\r\n",
       "</g>\r\n",
       "<!-- 4&#45;&gt;7 -->\r\n",
       "<g id=\"edge5\" class=\"edge\"><title>4&#45;&gt;7</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M1121.98,-730.358C1111.96,-720.612 1100.74,-711.214 1089,-704.059 983.619,-639.83 843.082,-605.466 756.653,-589.17\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"757.117,-585.697 746.647,-587.319 755.844,-592.58 757.117,-585.697\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1083.5\" y=\"-674.859\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 8 -->\r\n",
       "<g id=\"node7\" class=\"node\"><title>8</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1224,-593.716 1104,-593.716 1104,-557.716 1224,-557.716 1224,-593.716\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1164\" y=\"-572.016\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.193281651</text>\r\n",
       "</g>\r\n",
       "<!-- 4&#45;&gt;8 -->\r\n",
       "<g id=\"edge6\" class=\"edge\"><title>4&#45;&gt;8</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M1164,-715.674C1164,-678.036 1164,-632.562 1164,-604.132\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"1167.5,-603.769 1164,-593.769 1160.5,-603.769 1167.5,-603.769\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1171.5\" y=\"-674.859\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 13 -->\r\n",
       "<g id=\"node8\" class=\"node\"><title>13</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"402\" cy=\"-370.029\" rx=\"72.5877\" ry=\"72.5877\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"402\" y=\"-366.329\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f14&lt;&#45;3.41505241</text>\r\n",
       "</g>\r\n",
       "<!-- 7&#45;&gt;13 -->\r\n",
       "<g id=\"edge7\" class=\"edge\"><title>7&#45;&gt;13</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M622.479,-533.742C578.078,-500.974 515.684,-454.927 468.597,-420.177\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"470.413,-417.168 460.288,-414.046 466.256,-422.8 470.413,-417.168\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"583.5\" y=\"-469.173\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 14 -->\r\n",
       "<g id=\"node9\" class=\"node\"><title>14</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"738,-388.029 618,-388.029 618,-352.029 738,-352.029 738,-388.029\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"678\" y=\"-366.329\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.189662024</text>\r\n",
       "</g>\r\n",
       "<!-- 7&#45;&gt;14 -->\r\n",
       "<g id=\"edge8\" class=\"edge\"><title>7&#45;&gt;14</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M678,-506.041C678,-469.132 678,-425.698 678,-398.265\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"681.5,-398.238 678,-388.239 674.5,-398.239 681.5,-398.238\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"685.5\" y=\"-469.173\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 23 -->\r\n",
       "<g id=\"node10\" class=\"node\"><title>23</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"192\" cy=\"-164.343\" rx=\"72.5877\" ry=\"72.5877\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"192\" y=\"-160.643\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f10&lt;&#45;1.86999714</text>\r\n",
       "</g>\r\n",
       "<!-- 13&#45;&gt;23 -->\r\n",
       "<g id=\"edge9\" class=\"edge\"><title>13&#45;&gt;23</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M350.09,-318.68C320.18,-289.669 282.47,-253.093 251.382,-222.94\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"253.656,-220.269 244.041,-215.819 248.782,-225.294 253.656,-220.269\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"338.5\" y=\"-263.486\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 24 -->\r\n",
       "<g id=\"node11\" class=\"node\"><title>24</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"402\" cy=\"-164.343\" rx=\"68.4888\" ry=\"68.4888\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"402\" y=\"-160.643\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f6&lt;&#45;1.43182039</text>\r\n",
       "</g>\r\n",
       "<!-- 13&#45;&gt;24 -->\r\n",
       "<g id=\"edge10\" class=\"edge\"><title>13&#45;&gt;24</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M402,-297.217C402,-279.696 402,-260.872 402,-243.088\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"405.5,-242.756 402,-232.756 398.5,-242.756 405.5,-242.756\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"409.5\" y=\"-263.486\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 37 -->\r\n",
       "<g id=\"node12\" class=\"node\"><title>37</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"116,-36 0,-36 0,-0 116,-0 116,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"58\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=0.199777931</text>\r\n",
       "</g>\r\n",
       "<!-- 23&#45;&gt;37 -->\r\n",
       "<g id=\"edge11\" class=\"edge\"><title>23&#45;&gt;37</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M142.864,-110.415C121.558,-87.4635 97.6509,-61.7114 80.6546,-43.4032\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"83.19,-40.99 73.8213,-36.0425 78.0598,-45.7525 83.19,-40.99\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"136.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 38 -->\r\n",
       "<g id=\"node13\" class=\"node\"><title>38</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"250,-36 134,-36 134,-0 250,-0 250,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"192\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=0.181647122</text>\r\n",
       "</g>\r\n",
       "<!-- 23&#45;&gt;38 -->\r\n",
       "<g id=\"edge12\" class=\"edge\"><title>23&#45;&gt;38</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M192,-91.1716C192,-75.0933 192,-59.015 192,-46.1287\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"195.5,-46.1248 192,-36.1249 188.5,-46.1249 195.5,-46.1248\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"199.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 39 -->\r\n",
       "<g id=\"node14\" class=\"node\"><title>39</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"375.5,-36 268.5,-36 268.5,-0 375.5,-0 375.5,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"322\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.1902439</text>\r\n",
       "</g>\r\n",
       "<!-- 24&#45;&gt;39 -->\r\n",
       "<g id=\"edge13\" class=\"edge\"><title>24&#45;&gt;39</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M369.23,-104.217C357.832,-83.6506 345.623,-61.6225 336.474,-45.1154\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"339.379,-43.1368 331.47,-36.087 333.257,-46.5302 339.379,-43.1368\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"382.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 40 -->\r\n",
       "<g id=\"node15\" class=\"node\"><title>40</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"510,-36 394,-36 394,-0 510,-0 510,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"452\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=0.149325579</text>\r\n",
       "</g>\r\n",
       "<!-- 24&#45;&gt;40 -->\r\n",
       "<g id=\"edge14\" class=\"edge\"><title>24&#45;&gt;40</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M424.076,-99.612C430.623,-80.7125 437.441,-61.0301 442.701,-45.8452\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"446.105,-46.7107 446.071,-36.116 439.491,-44.4195 446.105,-46.7107\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"446.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 9 -->\r\n",
       "<g id=\"node18\" class=\"node\"><title>9</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1316\" cy=\"-575.716\" rx=\"69.5877\" ry=\"69.5877\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1316\" y=\"-572.016\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f4&lt;0.756407559</text>\r\n",
       "</g>\r\n",
       "<!-- 5&#45;&gt;9 -->\r\n",
       "<g id=\"edge17\" class=\"edge\"><title>5&#45;&gt;9</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M1370.81,-719.841C1362.48,-698.088 1352.99,-673.31 1344.28,-650.554\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"1347.44,-649.027 1340.59,-640.94 1340.9,-651.531 1347.44,-649.027\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1392.5\" y=\"-674.859\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 10 -->\r\n",
       "<g id=\"node19\" class=\"node\"><title>10</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1525\" cy=\"-575.716\" rx=\"74.187\" ry=\"74.187\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1525\" y=\"-572.016\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f9&lt;0.0896746516</text>\r\n",
       "</g>\r\n",
       "<!-- 5&#45;&gt;10 -->\r\n",
       "<g id=\"edge18\" class=\"edge\"><title>5&#45;&gt;10</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M1429.11,-725.818C1444.63,-701.679 1463.08,-672.989 1479.63,-647.253\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"1482.7,-648.953 1485.17,-638.649 1476.81,-645.167 1482.7,-648.953\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1471.5\" y=\"-674.859\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 11 -->\r\n",
       "<g id=\"node40\" class=\"node\"><title>11</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2272\" cy=\"-575.716\" rx=\"65.7887\" ry=\"65.7887\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2272\" y=\"-572.016\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f9&lt;0.88604176</text>\r\n",
       "</g>\r\n",
       "<!-- 6&#45;&gt;11 -->\r\n",
       "<g id=\"edge39\" class=\"edge\"><title>6&#45;&gt;11</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M2272,-703.977C2272,-686.963 2272,-668.939 2272,-651.972\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"2275.5,-651.563 2272,-641.564 2268.5,-651.564 2275.5,-651.563\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2306.5\" y=\"-674.859\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 12 -->\r\n",
       "<g id=\"node41\" class=\"node\"><title>12</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2747\" cy=\"-575.716\" rx=\"77.1866\" ry=\"77.1866\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2747\" y=\"-572.016\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f6&lt;&#45;0.0936132967</text>\r\n",
       "</g>\r\n",
       "<!-- 6&#45;&gt;12 -->\r\n",
       "<g id=\"edge40\" class=\"edge\"><title>6&#45;&gt;12</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M2342.86,-750.018C2429.53,-712.851 2575.9,-650.087 2666.67,-611.161\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"2668.28,-614.278 2676.1,-607.12 2665.53,-607.845 2668.28,-614.278\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2530.5\" y=\"-674.859\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 15 -->\r\n",
       "<g id=\"node20\" class=\"node\"><title>15</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"953\" cy=\"-370.029\" rx=\"72.5877\" ry=\"72.5877\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"953\" y=\"-366.329\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f21&lt;&#45;0.66516757</text>\r\n",
       "</g>\r\n",
       "<!-- 9&#45;&gt;15 -->\r\n",
       "<g id=\"edge19\" class=\"edge\"><title>9&#45;&gt;15</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M1267.66,-525.559C1256.78,-515.868 1244.91,-506.268 1233,-498.373 1169.22,-456.108 1089.13,-421.264 1030.96,-398.773\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"1032.05,-395.441 1021.46,-395.133 1029.54,-401.978 1032.05,-395.441\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1232.5\" y=\"-469.173\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 16 -->\r\n",
       "<g id=\"node21\" class=\"node\"><title>16</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1316\" cy=\"-370.029\" rx=\"77.1866\" ry=\"77.1866\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1316\" y=\"-366.329\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f14&lt;&#45;0.471963108</text>\r\n",
       "</g>\r\n",
       "<!-- 9&#45;&gt;16 -->\r\n",
       "<g id=\"edge20\" class=\"edge\"><title>9&#45;&gt;16</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M1316,-506.041C1316,-490.451 1316,-473.697 1316,-457.477\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"1319.5,-457.461 1316,-447.462 1312.5,-457.462 1319.5,-457.461\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1323.5\" y=\"-469.173\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 17 -->\r\n",
       "<g id=\"node34\" class=\"node\"><title>17</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1585,-388.029 1465,-388.029 1465,-352.029 1585,-352.029 1585,-388.029\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1525\" y=\"-366.329\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.194063932</text>\r\n",
       "</g>\r\n",
       "<!-- 10&#45;&gt;17 -->\r\n",
       "<g id=\"edge33\" class=\"edge\"><title>10&#45;&gt;17</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M1525,-501.468C1525,-465.741 1525,-424.905 1525,-398.585\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"1528.5,-398.251 1525,-388.251 1521.5,-398.251 1528.5,-398.251\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1559.5\" y=\"-469.173\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 18 -->\r\n",
       "<g id=\"node35\" class=\"node\"><title>18</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1692\" cy=\"-370.029\" rx=\"77.1866\" ry=\"77.1866\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1692\" y=\"-366.329\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f11&lt;&#45;0.650998592</text>\r\n",
       "</g>\r\n",
       "<!-- 10&#45;&gt;18 -->\r\n",
       "<g id=\"edge34\" class=\"edge\"><title>10&#45;&gt;18</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M1571.52,-517.978C1591.81,-493.229 1615.75,-464.026 1636.93,-438.201\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"1639.77,-440.255 1643.4,-430.303 1634.36,-435.817 1639.77,-440.255\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1621.5\" y=\"-469.173\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 25 -->\r\n",
       "<g id=\"node22\" class=\"node\"><title>25</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"728\" cy=\"-164.343\" rx=\"77.1866\" ry=\"77.1866\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"728\" y=\"-160.643\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f14&lt;&#45;0.263805211</text>\r\n",
       "</g>\r\n",
       "<!-- 15&#45;&gt;25 -->\r\n",
       "<g id=\"edge21\" class=\"edge\"><title>15&#45;&gt;25</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M899.393,-320.5C867.37,-291.511 826.48,-254.495 792.672,-223.889\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"794.892,-221.178 785.13,-217.061 790.194,-226.367 794.892,-221.178\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"882.5\" y=\"-263.486\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 26 -->\r\n",
       "<g id=\"node23\" class=\"node\"><title>26</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"953\" cy=\"-164.343\" rx=\"77.1866\" ry=\"77.1866\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"953\" y=\"-160.643\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f19&lt;&#45;0.896067262</text>\r\n",
       "</g>\r\n",
       "<!-- 15&#45;&gt;26 -->\r\n",
       "<g id=\"edge22\" class=\"edge\"><title>15&#45;&gt;26</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M953,-297.217C953,-282.607 953,-267.091 953,-252.027\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"956.5,-251.687 953,-241.687 949.5,-251.688 956.5,-251.687\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"960.5\" y=\"-263.486\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 27 -->\r\n",
       "<g id=\"node28\" class=\"node\"><title>27</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1266\" cy=\"-164.343\" rx=\"77.1866\" ry=\"77.1866\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1266\" y=\"-160.643\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f26&lt;&#45;0.335234344</text>\r\n",
       "</g>\r\n",
       "<!-- 16&#45;&gt;27 -->\r\n",
       "<g id=\"edge27\" class=\"edge\"><title>16&#45;&gt;27</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M1297.74,-294.629C1294.12,-279.9 1290.3,-264.343 1286.61,-249.321\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"1290,-248.419 1284.21,-239.541 1283.2,-250.088 1290,-248.419\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1327.5\" y=\"-263.486\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 28 -->\r\n",
       "<g id=\"node29\" class=\"node\"><title>28</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1435\" cy=\"-164.343\" rx=\"74.187\" ry=\"74.187\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1435\" y=\"-160.643\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f21&lt;0.610486686</text>\r\n",
       "</g>\r\n",
       "<!-- 16&#45;&gt;28 -->\r\n",
       "<g id=\"edge28\" class=\"edge\"><title>16&#45;&gt;28</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M1354.64,-302.898C1366.86,-281.969 1380.44,-258.735 1392.9,-237.411\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"1395.95,-239.117 1397.98,-228.717 1389.91,-235.585 1395.95,-239.117\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1387.5\" y=\"-263.486\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 41 -->\r\n",
       "<g id=\"node24\" class=\"node\"><title>41</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"650,-36 528,-36 528,-0 650,-0 650,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"589\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=0.0497116707</text>\r\n",
       "</g>\r\n",
       "<!-- 25&#45;&gt;41 -->\r\n",
       "<g id=\"edge23\" class=\"edge\"><title>25&#45;&gt;41</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M674.657,-107.949C653.278,-85.7492 629.741,-61.3071 612.758,-43.6716\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"614.906,-40.8557 605.448,-36.0803 609.863,-45.7113 614.906,-40.8557\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"668.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 42 -->\r\n",
       "<g id=\"node25\" class=\"node\"><title>42</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"788,-36 668,-36 668,-0 788,-0 788,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"728\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.198159948</text>\r\n",
       "</g>\r\n",
       "<!-- 25&#45;&gt;42 -->\r\n",
       "<g id=\"edge24\" class=\"edge\"><title>25&#45;&gt;42</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M728,-86.9449C728,-72.4935 728,-58.2689 728,-46.5994\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"731.5,-46.27 728,-36.27 724.5,-46.2701 731.5,-46.27\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"735.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 43 -->\r\n",
       "<g id=\"node26\" class=\"node\"><title>43</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"926,-36 806,-36 806,-0 926,-0 926,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"866\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.152970597</text>\r\n",
       "</g>\r\n",
       "<!-- 26&#45;&gt;43 -->\r\n",
       "<g id=\"edge25\" class=\"edge\"><title>26&#45;&gt;43</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M913.319,-97.5075C902.037,-78.789 890.409,-59.4976 881.504,-44.7223\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"884.498,-42.9095 876.338,-36.1516 878.502,-46.523 884.498,-42.9095\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"929.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 44 -->\r\n",
       "<g id=\"node27\" class=\"node\"><title>44</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1064,-36 944,-36 944,-0 1064,-0 1064,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1004\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.199959502</text>\r\n",
       "</g>\r\n",
       "<!-- 26&#45;&gt;44 -->\r\n",
       "<g id=\"edge26\" class=\"edge\"><title>26&#45;&gt;44</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M978.5,-91.1716C984.238,-74.9325 989.975,-58.6935 994.551,-45.743\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"997.918,-46.7197 997.949,-36.1249 991.318,-44.3876 997.918,-46.7197\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"998.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 45 -->\r\n",
       "<g id=\"node30\" class=\"node\"><title>45</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1202,-36 1082,-36 1082,-0 1202,-0 1202,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1142\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.197524995</text>\r\n",
       "</g>\r\n",
       "<!-- 27&#45;&gt;45 -->\r\n",
       "<g id=\"edge29\" class=\"edge\"><title>27&#45;&gt;45</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M1215.92,-105.049C1197.67,-83.8014 1177.98,-60.8857 1163.52,-44.0489\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"1166.04,-41.6105 1156.87,-36.3058 1160.73,-46.1719 1166.04,-41.6105\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1217.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 46 -->\r\n",
       "<g id=\"node31\" class=\"node\"><title>46</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1342,-36 1220,-36 1220,-0 1342,-0 1342,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1281\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=0.0254617967</text>\r\n",
       "</g>\r\n",
       "<!-- 27&#45;&gt;46 -->\r\n",
       "<g id=\"edge30\" class=\"edge\"><title>27&#45;&gt;46</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M1273.9,-87.3672C1275.43,-72.5993 1276.94,-58.0443 1278.17,-46.1849\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"1281.67,-46.4309 1279.22,-36.1227 1274.71,-45.7073 1281.67,-46.4309\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1284.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 47 -->\r\n",
       "<g id=\"node32\" class=\"node\"><title>47</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1480,-36 1360,-36 1360,-0 1480,-0 1480,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1420\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.190847963</text>\r\n",
       "</g>\r\n",
       "<!-- 28&#45;&gt;47 -->\r\n",
       "<g id=\"edge31\" class=\"edge\"><title>28&#45;&gt;47</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M1427.41,-90.3258C1425.78,-74.6418 1424.16,-59.0111 1422.85,-46.3969\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"1426.3,-45.7474 1421.78,-36.1628 1419.34,-46.471 1426.3,-45.7474\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1459.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 48 -->\r\n",
       "<g id=\"node33\" class=\"node\"><title>48</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1614,-36 1498,-36 1498,-0 1614,-0 1614,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1556\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=0.023114793</text>\r\n",
       "</g>\r\n",
       "<!-- 28&#45;&gt;48 -->\r\n",
       "<g id=\"edge32\" class=\"edge\"><title>28&#45;&gt;48</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M1482.13,-107.123C1500.38,-85.3544 1520.33,-61.5478 1534.9,-44.1723\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"1537.84,-46.1083 1541.58,-36.1963 1532.48,-41.6114 1537.84,-46.1083\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1531.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 29 -->\r\n",
       "<g id=\"node36\" class=\"node\"><title>29</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"1692\" cy=\"-164.343\" rx=\"69.5877\" ry=\"69.5877\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1692\" y=\"-160.643\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f14&lt;0.21521394</text>\r\n",
       "</g>\r\n",
       "<!-- 18&#45;&gt;29 -->\r\n",
       "<g id=\"edge35\" class=\"edge\"><title>18&#45;&gt;29</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M1692,-292.605C1692,-276.863 1692,-260.255 1692,-244.421\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"1695.5,-244.144 1692,-234.144 1688.5,-244.145 1695.5,-244.144\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1726.5\" y=\"-263.486\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 30 -->\r\n",
       "<g id=\"node37\" class=\"node\"><title>30</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1900,-182.343 1780,-182.343 1780,-146.343 1900,-146.343 1900,-182.343\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1840\" y=\"-160.643\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.179527566</text>\r\n",
       "</g>\r\n",
       "<!-- 18&#45;&gt;30 -->\r\n",
       "<g id=\"edge36\" class=\"edge\"><title>18&#45;&gt;30</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M1739.45,-308.772C1748.06,-297.529 1756.89,-285.815 1765,-274.686 1785.5,-246.565 1807.94,-213.527 1822.88,-191.185\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"1825.97,-192.862 1828.61,-182.6 1820.15,-188.979 1825.97,-192.862\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1783.5\" y=\"-263.486\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 49 -->\r\n",
       "<g id=\"node38\" class=\"node\"><title>49</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1752,-36 1632,-36 1632,-0 1752,-0 1752,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1692\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.139534876</text>\r\n",
       "</g>\r\n",
       "<!-- 29&#45;&gt;49 -->\r\n",
       "<g id=\"edge37\" class=\"edge\"><title>29&#45;&gt;49</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M1692,-94.5535C1692,-77.4796 1692,-60.1527 1692,-46.4064\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"1695.5,-46.223 1692,-36.2231 1688.5,-46.2231 1695.5,-46.223\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1726.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 50 -->\r\n",
       "<g id=\"node39\" class=\"node\"><title>50</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"1886,-36 1770,-36 1770,-0 1886,-0 1886,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1828\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=0.195018753</text>\r\n",
       "</g>\r\n",
       "<!-- 29&#45;&gt;50 -->\r\n",
       "<g id=\"edge38\" class=\"edge\"><title>29&#45;&gt;50</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M1739.57,-112.859C1761.65,-89.4223 1786.9,-62.6221 1804.75,-43.6759\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"1807.37,-46 1811.68,-36.3215 1802.27,-41.1996 1807.37,-46\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1799.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 19 -->\r\n",
       "<g id=\"node42\" class=\"node\"><title>19</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2166\" cy=\"-370.029\" rx=\"74.187\" ry=\"74.187\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2166\" y=\"-366.329\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f10&lt;0.326116294</text>\r\n",
       "</g>\r\n",
       "<!-- 11&#45;&gt;19 -->\r\n",
       "<g id=\"edge41\" class=\"edge\"><title>11&#45;&gt;19</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M2240.24,-518.066C2233.45,-505.699 2226.41,-492.64 2220,-480.373 2214.24,-469.34 2208.28,-457.609 2202.51,-446.081\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"2205.52,-444.287 2197.93,-436.897 2199.26,-447.409 2205.52,-444.287\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2254.5\" y=\"-469.173\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 20 -->\r\n",
       "<g id=\"node43\" class=\"node\"><title>20</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2378,-388.029 2258,-388.029 2258,-352.029 2378,-352.029 2378,-388.029\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2318\" y=\"-366.329\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.188154906</text>\r\n",
       "</g>\r\n",
       "<!-- 11&#45;&gt;20 -->\r\n",
       "<g id=\"edge42\" class=\"edge\"><title>11&#45;&gt;20</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M2286.3,-511.385C2294.86,-473.484 2305.31,-427.239 2311.81,-398.455\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"2315.3,-398.858 2314.09,-388.332 2308.48,-397.316 2315.3,-398.858\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2303.5\" y=\"-469.173\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 21 -->\r\n",
       "<g id=\"node50\" class=\"node\"><title>21</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2747\" cy=\"-370.029\" rx=\"77.1866\" ry=\"77.1866\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2747\" y=\"-366.329\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f14&lt;&#45;0.427408516</text>\r\n",
       "</g>\r\n",
       "<!-- 12&#45;&gt;21 -->\r\n",
       "<g id=\"edge49\" class=\"edge\"><title>12&#45;&gt;21</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M2747,-498.291C2747,-485.068 2747,-471.233 2747,-457.76\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"2750.5,-457.544 2747,-447.544 2743.5,-457.544 2750.5,-457.544\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2781.5\" y=\"-469.173\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 22 -->\r\n",
       "<g id=\"node51\" class=\"node\"><title>22</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"3106\" cy=\"-370.029\" rx=\"65.7887\" ry=\"65.7887\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"3106\" y=\"-366.329\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f7&lt;1.08542144</text>\r\n",
       "</g>\r\n",
       "<!-- 12&#45;&gt;22 -->\r\n",
       "<g id=\"edge50\" class=\"edge\"><title>12&#45;&gt;22</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M2814.1,-536.643C2878.84,-499.912 2976.22,-444.663 3040.43,-408.229\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"3042.3,-411.196 3049.27,-403.217 3038.84,-405.108 3042.3,-411.196\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2944.5\" y=\"-469.173\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 31 -->\r\n",
       "<g id=\"node44\" class=\"node\"><title>31</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2088\" cy=\"-164.343\" rx=\"69.5877\" ry=\"69.5877\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2088\" y=\"-160.643\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f14&lt;1.02928388</text>\r\n",
       "</g>\r\n",
       "<!-- 19&#45;&gt;31 -->\r\n",
       "<g id=\"edge43\" class=\"edge\"><title>19&#45;&gt;31</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M2133.85,-303.025C2129.66,-293.6 2125.58,-283.957 2122,-274.686 2117.87,-264.002 2113.88,-252.588 2110.17,-241.314\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"2113.39,-239.904 2106.98,-231.464 2106.73,-242.056 2113.39,-239.904\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2156.5\" y=\"-263.486\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 32 -->\r\n",
       "<g id=\"node45\" class=\"node\"><title>32</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2245\" cy=\"-164.343\" rx=\"69.5877\" ry=\"69.5877\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2245\" y=\"-160.643\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f24&lt;1.08904982</text>\r\n",
       "</g>\r\n",
       "<!-- 19&#45;&gt;32 -->\r\n",
       "<g id=\"edge44\" class=\"edge\"><title>19&#45;&gt;32</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M2192.53,-300.638C2200.23,-280.784 2208.67,-259.021 2216.48,-238.866\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"2219.79,-240.014 2220.15,-229.425 2213.27,-237.483 2219.79,-240.014\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2214.5\" y=\"-263.486\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 51 -->\r\n",
       "<g id=\"node46\" class=\"node\"><title>51</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2020,-36 1904,-36 1904,-0 2020,-0 2020,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"1962\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=0.185238153</text>\r\n",
       "</g>\r\n",
       "<!-- 31&#45;&gt;51 -->\r\n",
       "<g id=\"edge45\" class=\"edge\"><title>31&#45;&gt;51</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M2042.51,-111.232C2022.49,-88.3001 1999.91,-62.4331 1983.77,-43.9413\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"1986.27,-41.4818 1977.06,-36.2499 1981,-46.0851 1986.27,-41.4818\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2036.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 52 -->\r\n",
       "<g id=\"node47\" class=\"node\"><title>52</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2158,-36 2038,-36 2038,-0 2158,-0 2158,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2098\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.168292686</text>\r\n",
       "</g>\r\n",
       "<!-- 31&#45;&gt;52 -->\r\n",
       "<g id=\"edge46\" class=\"edge\"><title>31&#45;&gt;52</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M2092.77,-94.5535C2093.95,-77.4796 2095.15,-60.1527 2096.1,-46.4064\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"2099.61,-46.4411 2096.81,-36.2231 2092.62,-45.9572 2099.61,-46.4411\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2102.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 53 -->\r\n",
       "<g id=\"node48\" class=\"node\"><title>53</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2296,-36 2176,-36 2176,-0 2296,-0 2296,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2236\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.191679999</text>\r\n",
       "</g>\r\n",
       "<!-- 32&#45;&gt;53 -->\r\n",
       "<g id=\"edge47\" class=\"edge\"><title>32&#45;&gt;53</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M2240.71,-94.5535C2239.65,-77.4796 2238.57,-60.1527 2237.71,-46.4064\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"2241.19,-45.9859 2237.07,-36.2231 2234.2,-46.4215 2241.19,-45.9859\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2272.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 54 -->\r\n",
       "<g id=\"node49\" class=\"node\"><title>54</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2430,-36 2314,-36 2314,-0 2430,-0 2430,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2372\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=0.186861038</text>\r\n",
       "</g>\r\n",
       "<!-- 32&#45;&gt;54 -->\r\n",
       "<g id=\"edge48\" class=\"edge\"><title>32&#45;&gt;54</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M2290.49,-111.64C2310.83,-88.5267 2333.85,-62.3606 2350.23,-43.7467\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"2353.05,-45.8333 2357.03,-36.0136 2347.8,-41.2093 2353.05,-45.8333\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2344.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 33 -->\r\n",
       "<g id=\"node52\" class=\"node\"><title>33</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2629\" cy=\"-164.343\" rx=\"77.1866\" ry=\"77.1866\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2629\" y=\"-160.643\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f10&lt;&#45;0.049075719</text>\r\n",
       "</g>\r\n",
       "<!-- 21&#45;&gt;33 -->\r\n",
       "<g id=\"edge51\" class=\"edge\"><title>21&#45;&gt;33</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M2708.53,-302.617C2697.04,-282.796 2684.38,-260.929 2672.59,-240.585\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"2675.46,-238.564 2667.42,-231.666 2669.41,-242.073 2675.46,-238.564\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2725.5\" y=\"-263.486\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 34 -->\r\n",
       "<g id=\"node53\" class=\"node\"><title>34</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"2794\" cy=\"-164.343\" rx=\"69.5877\" ry=\"69.5877\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2794\" y=\"-160.643\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f29&lt;7.59500027</text>\r\n",
       "</g>\r\n",
       "<!-- 21&#45;&gt;34 -->\r\n",
       "<g id=\"edge52\" class=\"edge\"><title>21&#45;&gt;34</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M2764.23,-294.341C2768.15,-277.352 2772.33,-259.275 2776.27,-242.197\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"2779.72,-242.804 2778.56,-232.273 2772.9,-241.23 2779.72,-242.804\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2778.5\" y=\"-263.486\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 35 -->\r\n",
       "<g id=\"node58\" class=\"node\"><title>35</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"3106\" cy=\"-164.343\" rx=\"74.187\" ry=\"74.187\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"3106\" y=\"-160.643\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f11&lt;0.765143931</text>\r\n",
       "</g>\r\n",
       "<!-- 22&#45;&gt;35 -->\r\n",
       "<g id=\"edge57\" class=\"edge\"><title>22&#45;&gt;35</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M3106,-304.302C3106,-286.708 3106,-267.403 3106,-248.927\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"3109.5,-248.763 3106,-238.763 3102.5,-248.763 3109.5,-248.763\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"3140.5\" y=\"-263.486\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 36 -->\r\n",
       "<g id=\"node59\" class=\"node\"><title>36</title>\r\n",
       "<ellipse fill=\"none\" stroke=\"black\" cx=\"3342\" cy=\"-164.343\" rx=\"74.187\" ry=\"74.187\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"3342\" y=\"-160.643\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">f10&lt;0.953918099</text>\r\n",
       "</g>\r\n",
       "<!-- 22&#45;&gt;36 -->\r\n",
       "<g id=\"edge58\" class=\"edge\"><title>22&#45;&gt;36</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M3155.47,-326.33C3191.33,-295.38 3240.11,-253.278 3278.8,-219.892\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"3281.11,-222.52 3286.39,-213.337 3276.54,-217.221 3281.11,-222.52\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"3238.5\" y=\"-263.486\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 55 -->\r\n",
       "<g id=\"node54\" class=\"node\"><title>55</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2564,-36 2448,-36 2448,-0 2564,-0 2564,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2506\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=0.180488408</text>\r\n",
       "</g>\r\n",
       "<!-- 33&#45;&gt;55 -->\r\n",
       "<g id=\"edge53\" class=\"edge\"><title>33&#45;&gt;55</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M2579.33,-105.049C2561.22,-83.8014 2541.69,-60.8857 2527.35,-44.0489\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"2529.9,-41.6471 2520.75,-36.3058 2524.57,-46.1873 2529.9,-41.6471\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2579.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 56 -->\r\n",
       "<g id=\"node55\" class=\"node\"><title>56</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2702,-36 2582,-36 2582,-0 2702,-0 2702,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2642\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.172340438</text>\r\n",
       "</g>\r\n",
       "<!-- 33&#45;&gt;56 -->\r\n",
       "<g id=\"edge54\" class=\"edge\"><title>33&#45;&gt;56</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M2635.88,-86.9449C2637.2,-72.3446 2638.49,-57.9757 2639.55,-46.2393\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"2643.03,-46.5437 2640.44,-36.27 2636.06,-45.9157 2643.03,-46.5437\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2645.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 57 -->\r\n",
       "<g id=\"node56\" class=\"node\"><title>57</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2842,-36 2720,-36 2720,-0 2842,-0 2842,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2781\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=0.0989542827</text>\r\n",
       "</g>\r\n",
       "<!-- 34&#45;&gt;57 -->\r\n",
       "<g id=\"edge55\" class=\"edge\"><title>34&#45;&gt;57</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M2787.84,-94.9759C2786.29,-77.7268 2784.71,-60.187 2783.46,-46.3126\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"2786.92,-45.6926 2782.54,-36.0469 2779.95,-46.3206 2786.92,-45.6926\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2819.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 58 -->\r\n",
       "<g id=\"node57\" class=\"node\"><title>58</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"2980,-36 2860,-36 2860,-0 2980,-0 2980,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2920\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.197600365</text>\r\n",
       "</g>\r\n",
       "<!-- 34&#45;&gt;58 -->\r\n",
       "<g id=\"edge56\" class=\"edge\"><title>34&#45;&gt;58</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M2839.49,-111.232C2859.51,-88.3001 2882.09,-62.4331 2898.23,-43.9413\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"2901,-46.0851 2904.94,-36.2499 2895.73,-41.4818 2901,-46.0851\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"2893.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 59 -->\r\n",
       "<g id=\"node60\" class=\"node\"><title>59</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3118,-36 2998,-36 2998,-0 3118,-0 3118,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"3058\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.199359611</text>\r\n",
       "</g>\r\n",
       "<!-- 35&#45;&gt;59 -->\r\n",
       "<g id=\"edge59\" class=\"edge\"><title>35&#45;&gt;59</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M3082.84,-93.7084C3077.19,-76.7036 3071.47,-59.5108 3066.95,-45.9123\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"3070.22,-44.6614 3063.75,-36.2767 3063.58,-46.8703 3070.22,-44.6614\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"3107.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 60 -->\r\n",
       "<g id=\"node61\" class=\"node\"><title>60</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3263.5,-36 3136.5,-36 3136.5,-0 3263.5,-0 3263.5,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"3200\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.0343811922</text>\r\n",
       "</g>\r\n",
       "<!-- 35&#45;&gt;60 -->\r\n",
       "<g id=\"edge60\" class=\"edge\"><title>35&#45;&gt;60</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M3146.14,-101.71C3159.15,-81.7252 3172.88,-60.6387 3183.23,-44.7586\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"3186.37,-46.3478 3188.89,-36.0581 3180.5,-42.5278 3186.37,-46.3478\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"3181.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "<!-- 61 -->\r\n",
       "<g id=\"node62\" class=\"node\"><title>61</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3402,-36 3282,-36 3282,-0 3402,-0 3402,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"3342\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=&#45;0.193341881</text>\r\n",
       "</g>\r\n",
       "<!-- 36&#45;&gt;61 -->\r\n",
       "<g id=\"edge61\" class=\"edge\"><title>36&#45;&gt;61</title>\r\n",
       "<path fill=\"none\" stroke=\"#0000ff\" d=\"M3342,-89.903C3342,-74.2819 3342,-58.7401 3342,-46.2061\"/>\r\n",
       "<polygon fill=\"#0000ff\" stroke=\"#0000ff\" points=\"3345.5,-46.0391 3342,-36.0391 3338.5,-46.0392 3345.5,-46.0391\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"3376.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">yes, missing</text>\r\n",
       "</g>\r\n",
       "<!-- 62 -->\r\n",
       "<g id=\"node63\" class=\"node\"><title>62</title>\r\n",
       "<polygon fill=\"none\" stroke=\"black\" points=\"3536,-36 3420,-36 3420,-0 3536,-0 3536,-36\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"3478\" y=\"-14.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">leaf=0.141643807</text>\r\n",
       "</g>\r\n",
       "<!-- 36&#45;&gt;62 -->\r\n",
       "<g id=\"edge62\" class=\"edge\"><title>36&#45;&gt;62</title>\r\n",
       "<path fill=\"none\" stroke=\"#ff0000\" d=\"M3392.64,-109.595C3414.05,-86.8714 3437.92,-61.5364 3454.96,-43.4488\"/>\r\n",
       "<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"3457.51,-45.848 3461.82,-36.1695 3452.42,-41.0476 3457.51,-45.848\"/>\r\n",
       "<text text-anchor=\"middle\" x=\"3448.5\" y=\"-57.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">no</text>\r\n",
       "</g>\r\n",
       "</g>\r\n",
       "</svg>\r\n"
      ],
      "text/plain": [
       "<graphviz.dot.Digraph at 0x14969dd8>"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.figure.Figure at 0x149782b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 模型重要性的决策树可视化\n",
    "plt.figure(figsize = (12, 8))\n",
    "os.environ['PATH'] += os.pathsep + 'D:/Graphviz2.38/bin'\n",
    "xgb.to_graphviz(model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n"
     ]
    }
   ],
   "source": [
    "# 学习曲线显示精度\n",
    "trainSizes, trainScores, crossValScores = learning_curve(\n",
    "    xgb.XGBClassifier(silent = 1,\n",
    "                      scale_pos_weight = weights,\n",
    "                      n_jobs = -1,\n",
    "                      eval_metric = 'auc',\n",
    "                      n_estimators = 400,\n",
    "                      max_depth = 6,\n",
    "                      min_child_weight = min_child_weight,\n",
    "                      subsample = subsample,\n",
    "                      colsample_bytree = colsample_bytree,\n",
    "                      reg_alpha = reg_alpha,\n",
    "                      reg_lambda = reg_lambda,\n",
    "                      seed = seed\n",
    "                     ),\n",
    "    X_dtrain,\n",
    "    y_dtrain,\n",
    "    cv = 5,\n",
    "    scoring = 'accuracy'\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5,1,'Learning Curves (70% samples)')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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/PznP8fMMDPi4uIYOHAg8+bNo6amJvxxH374IUVFRaSnp9O7d28WLFhAfaigA/DBBx8wbdo0MjIy6NOnDwsXLmz2efft28c111xDeno6/fv3Z/ny5afU388++4zk5GQeeOCBZu2bN2/GzNiyZUu4rbKykri4OB577LFm1953331kZ2efaogiQlmRRE7TRZtxcY2lDBMTlYCLiIh0UU8//TRz587lkUce4bzzzuMHP/gBs2bN4hvf+AYAr776KrW1tbzyyissXLiQ9957j2eeeQaAqVOnsnv3bp566ikOHz7M3LlzSUlJ4d577wVgypQp1NfX8/zzz7N7927uvPNOcnJymDJlCp999hlXX301OTk5rF27lvXr1zN79mxGjRrFpZde+oV9TkxMJC8vj7KysmbtZWVlpKSkNPv4jRs34pwjEAhQXFwcydC1mrIlaTuVMhQREenWGhoauOeee5g9ezZ33HEHAD169GD8+PFccMEFAIwePRqAr3/969TU1PDAAw/wxBNPsHfvXtavX88LL7zAN7/5TQDefvttHnvsMUpKSnj33XcpLS3ltddeY8SIERQUFFBWVsbq1auZMmUK27dv58033+Tll18mIyOD/Px81q1bxzPPPPOliTlAQUEBS5Ysoa6ujjOCA4RlZWVcfvnlJDQpLhEIBEhISGDz5s3Nru0Mmsoipy60aPPTT/3j+HE/Kt6vHwwZAv37+9KG2nVTREQkMtasgexs/5fo7Gx/3IF27txJRUUFkydPDreNHj2ahoYGsrKyPnf9yJEjqa2tpbKyMjxdZNy4ceHzV111FVVVVezZs4cPP/wQ8NNZQh5++OHw9JMTnV+9ejW33377KfW9sLCQmpoaysvLAaivr2f79u0UFBQ0uy4QCHD77bdTXV3Njh07Tunep4sSc/lidXVw5IhPxGtq/Eh4377+h8PgwdC7t68xrvriIiIikbVmDdx6K+zf7wfH9u/3xx2YnL/++usAnH/++eG2jIwM1q1bR2Vl5eeuf++99zAzMjMz2bdvH2eddRapqanh8/369QP83PFhw4bRv39/br75Zn7zm9/gnOPcc89l1KhRAOTl5ZGWlsakSZPYuHEjADk5OQwbNgyAurq6kz7Av4Ho1atXeDrLrl27qK6uprCwMNyfAwcO8Ne//pUbb7yR8847j0AgELHYtYWmskhzTUsZgt/gJyOjcYMflTIUERFpneJi2LWr9R/3pz/538lNHTkCt9wCq1a17l65udBiceOpeP/99wGfjDc1fvx4Dh8+3Kxtz549PPTQQxQWFpKYmEh1dXWzpBwIH1dXV5OYmMjatWv51re+xbe//W1GjhzJsmXLGDNmDABZWVm8+OKLfOc736GgoICCggKWLVvG0KFDAYiPjz9pv99++22ys7MZO3YsZWVlzJ07l7KyMjIyMhgxYkT4ukAgQHJyMqNGjeLyyy8nEAhQUlLS6jhFirIs8VNSamr8qPiRI36u+DnnwKBB/pGZ6duUlIuIiHSclkn5l7WfBrW1tQDEfUEOEKrMkpOTQ2pqKk8++WT4nHOu2bWhYwtOeR0+fDhvvvkmjz/+OBUVFeTn5/P73/8+fH1hYSF/+9vfWLJkCTt37mTMmDHs3LkTgPLy8pM+zjnnnPDHb926FeccW7ZsIT8/v9nXEggEuPTSS0lISGDs2LG8/PLLHDt2rD0haxeNmMeihgb/TR1atJmQ4EsZhjb40fxwERGRyGnDSDXgp43u3//59oEDYdOm9vTolKWlpQFQU1NDeno64OdqX3HFFXzve98DfIJcUVHBxIkTmT9/PgMGDACgV69ezUonhu4D0LNnz3BbQkICt912GzfccANXXXUVM2fO5MCBA836cNdddzF16lTGjh3LnDlz2LZtG7m5uV/a/8LCQoqLi3njjTfYunUrixYtanZ+48aNHDhwIPxGAWDbtm3Nprt0JA2Bxora2sZR8WPHfA3xr37VzxPPzm6spqKkXEREJDosXuynkjaVkuLbO8iQIUMAPzUkpKqqim3btoXncufm5jJhwgQmTZrE0qVLw9cNHjyYqqoqqkP7mQDvvvsuAIMGDWLVqlWMHz8+fO4rX/kKCxcu5ODBg3zwwQfcf//9zJgxI3x+0KBBFBcXs3v37lPuf05ODllZWaxatYq///3vzRLut956iwMHDrB69erwSHt2dnanzjNXYt5d1dc3bvDz6ad+cWafPv5d9pAhkJXla4yrvriIiEh0KiqClSv9724z/+/Klb69g4wdO5aEhAR+97vfhdu2bt2KmVFVVdXs2rvvvpvy8nLWr18PwBVXXAEQPgbYsGEDvXv3ZujQoSQlJREIBPjoo4/C5ysrK0lOTiYzM5O4uDjWrVvH8ePHm50PLSA9VVdeeSUrVqzg7LPP5mtf+1q4PVQm8YYbbiA3N5fc3Fwuu+wySktLW3X/SFJW1l0417jBD/iEu+kGP6qaIiIi0vUUFXVoIt7SmWeeybx587j//vvp2bMn/fr144477mDy5MnhedwhF198MYWFhSxdupRx48YxbNgwJkyYwKxZs6ivr+fQoUMsX76cH/7wh8TFxXHttdeSkZHB9ddfz4IFC3j//fdZtGgRt956K2ZGUVERS5YsYfr06cycOZO//OUvLFu27HO7eX6ZwsJCnnvuuc9NTyktLWXkyJEkJSWF2/Ly8nj22Wf5+OOPATh27BgbNmxo9nHx8fHhNx2RpsS8K6uvb5wrbuaT8MzMxg1+RERERNrpwQcfJCkpicWLF1NdXc3kyZNZvnw5zz///OeuLSkpoaCggB07djB69GjWrFnD7NmzmTFjBklJSdx5553Mnz8f8En/hg0bKC4uZvLkyWRkZDB9+vRw4j148GBeeukl5s+fz8SJE+nbty8LFy5kzpw5rep/KCFvWr/cOcemTZvC8+RD8vLyqK+vZ/PmzYAv/9i0Djv4ufNNR/kjyVqulo0FZubg8yuFO8TRo/DOOxBcQNEqLUsZnnGG39BHpQxFRESiwt69e8Pl/CQ2tXwNhBaWOue+dCGfRsyjXV2dT8ad86PiaWk+qU9M9DXGRURERKRbUGIebUKlDOvqfCKuUoYiIiIiMUGJeTQILdp0zk9HSU/3I+OJiaqaIiIiIhIjlPV1Buf8XPPQqHhSki9lGFq0qVFxERERkZijxLyjmfmR8LQ0lTIUERHphpxzzXaSlNjR3sIiSsw7WlISDBrU2b0QERGR0yA+Pp6jR4+S0nLHTokJR48eJb4dxTlUX09EREQkQvr06cPBgwc5cuRI55Rllk7hnOPIkSMcPHiQPn36tPk+GjEXERERiZCePXsCUFFR0Wwreen+4uPjycrKCr8G2kIbDImIiIiInCat2WBIU1lERERERKKAEnMRERERkSigxFxEREREJAooMRcRERERiQJKzEVEREREooAScxERERGRKKDEXEREREQkCigxFxERERGJAkrMRURERESigBJzEREREZEooMRcRERERCQKKDEXEREREYkCSsxFRERERKKAEnMRERERkShwRmd3oDOZWWd3QUREREQE0Ii5iIiIiEhUMOdcZ/dB2sDMdjjnRnd2P7oTxTSyFM/IU0wj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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14ce73c8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "trainScoresMean = np.mean(trainScores, axis = 1)\n",
    "trainScoresStd = np.std(trainScores, axis = 1)\n",
    "crossValScoresMean = np.mean(crossValScores, axis = 1)\n",
    "crossValScoresStd = np.std(crossValScores, axis = 1)\n",
    "\n",
    "fig = plt.figure(figsize = (12, 8))\n",
    "plt.fill_between(trainSizes,\n",
    "                 trainScoresMean - trainScoresStd,\n",
    "                 trainScoresMean + trainScoresStd,\n",
    "                 alpha = 0.1,\n",
    "                 color = 'b')\n",
    "plt.fill_between(trainSizes,\n",
    "                 crossValScoresMean - crossValScoresStd,\n",
    "                 crossValScoresMean + crossValScoresStd,\n",
    "                 alpha = 0.1,\n",
    "                 color = 'r')\n",
    "plt.plot(trainSizes,\n",
    "         trainScores.mean(axis = 1),\n",
    "         'o-',\n",
    "         label = 'TRAIN',\n",
    "         color = 'b')\n",
    "plt.plot(trainSizes,\n",
    "         crossValScores.mean(axis = 1),\n",
    "         'o-',\n",
    "         label = 'CROSS-VAL',\n",
    "         color = 'r')\n",
    "\n",
    "ax = plt.gca()\n",
    "for axis in ['top', 'bottom', 'left', 'right']:\n",
    "    ax.spines[axis].set_linewidth(2)\n",
    "\n",
    "handles, labels = ax.get_legend_handles_labels()\n",
    "plt.legend(handles,\n",
    "           ['TRAIN', 'CROSS-VAL'],\n",
    "           bbox_to_anchor = (0.8, 0.15),\n",
    "           loc = 2,\n",
    "           borderaxespad = 0,\n",
    "           fontsize = 16)\n",
    "plt.xlabel('TRAIN', size = 16)\n",
    "plt.ylabel('AUC', size = 16)\n",
    "plt.title('Learning Curves (70% samples)', size = 20)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
